这里的javascript noob总数...具有三个文件:剔除,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
是什么?我将它们放在一起放在视图中,但不确定这是否正确...
<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:“如果变量像鸭子一样行走,而像鸭子一样发出嘎嘎声,那么它一定是鸭子”。
根据您的问题:
RoomViewModel如何知道RoomModel是什么?
答案将是:如果RoomViewModel
构造函数的输入变量具有Name
属性,则也可以将其视为有效的RoomModel
。
换句话说,视图模型不需要知道输入是有效的RoomModel。这取决于来电者。至于View Model构造函数,这同样可以:
var roomViewModel = new RoomViewModel({ Name: 'Hello World' });
从某种意义上说:是的。
作为一个脚注,如果您对该系统不满意,可以研究TypeScript。它向JavaScript添加了更多静态类型化功能,使您可以将输入参数的类型锁定为特定的构造函数(Typescript术语中的“类”)或接口(以使您保留某些鸭子类型)特征)。