javascript - 如何从 View 模型引用模型类型?

标签 javascript knockout.js

这里完全是 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/

相关文章:

javascript - 在 Chrome 中重新显示 html 输入范围拇指

javascript - 需要一种方法来复制缩短的超长字符串

javascript - 向下滚动然后向上滚动时如何隐藏div

javascript - knockout 绑定(bind)处理程序未定义错误

javascript - 注释中的条件运算符 floatval

javascript - 从 mapbox 隐藏子层名称链接,然后在单击其父层时使其可见

javascript - Knockoutjs 和动态更改模板

javascript - findOneAndRemove 和 findOneAndUpdate 未按预期工作

javascript - D3.js 跨多个图同步缩放

knockout.js - 如何从 knockout 绑定(bind)中获取 DOM 元素?