这里完全是 javascript 菜鸟...有三个文件:knockout、RoomModel 和 RoomViewModel
房间模型
function RoomModel(name) {
var self = this;
self.name = name;
}
RoomViewModel
function RoomViewModel(roomModel) {
var self = this;
self.Name = ko.observable(roomModel.Name).toLowerCase();
}
RoomViewModel
如何知道 RoomModel
是什么?
我将它们全部放在 View 中,但也不确定这是否正确......
<body>
<script src="Models/RoomModel.js"></script>
<script src="ViewModels/RoomViewModel.js"></script>
<script type='text/javascript' src='/Scripts/knockout-3.4.0.js'>
var roomViewModel = new RoomViewModel(new RoomModel('Hello World'));
ko.applyBindings(roomViewModel);
</script>
</body>
最佳答案
JavaScript 没有静态类型系统。相反,将 JS 视为具有 Duck Typing 会有所帮助。 :“如果一个变量像鸭子一样行走,并且像鸭子一样嘎嘎叫,那么它一定是鸭子”。
根据您的问题:
How does RoomViewModel know what a RoomModel is?
答案是:如果 RoomViewModel
构造函数的输入变量具有 Name
属性,那么它也可能被视为有效的 RoomModel
.
换句话说, View 模型不需要知道输入是有效的 RoomModel。这取决于调用者。就 View 模型构造函数而言,这同样很好:
var roomViewModel = new RoomViewModel({ Name: 'Hello World' });
从某种意义上说:确实如此。
作为脚注,如果您对这个系统感到不安,您可以查看 TypeScript。它为 JavaScript 添加了一些更多的静态类型功能,允许您将输入参数的类型锁定到特定的构造函数(Typescript 术语中的“类”)或接口(interface)(这允许您保留一些鸭子类型)功能)。
关于javascript - 如何从 View 模型引用模型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248060/