如果已经使用映射插件手动或自动定义了一个viewmodel,那么稍后在代码中使用原型“扩展”(添加属性/函数)viewmodel有什么问题吗?
我知道映射插件的创建回调,我只想知道是否有使用原型的含义?我问的原因是因为我从服务器端代码生成大部分视图模型,但有时需要在初始生成之后延长viewmodel。
答案 0 :(得分:2)
我认为这没有任何问题,我使用来自相应结构化JSON的映射插件实例化的大型深视图模型图,我使用原型来定义具有有用属性的“AbstractViewModel”和toJSON“覆盖” “除其他外。
答案 1 :(得分:1)
这没有问题。当viewModel中的特定字段中没有数据时,只需确保视图响应正确。
答案 2 :(得分:1)
似乎有几种方法可以解决这个问题。
首先,您可以采用单个对象视图模型,并通过原型实现它们扩展它们:
ko.utils.extend(ViewModelClass.prototype, {
newPrototype1: function () { ... },
newPrototype2: function () { ... }
}
或者,你可以添加一个扩展器来敲除并通过可观察对象本身调用它: (http://knockoutjs.com/documentation/extenders.html)
ko.extenders.numeric = function(target, precision) {
...details in link above...
}
...
self.NumericProperty = ko.observable(data).extend({ numeric: 0 });
...
或创建一个可用于observable,observableArray的所有实例的函数,计算... (http://knockoutjs.com/documentations/fn.html)
ko.observable.fn.filterByProperty = function(propName, matchValue) {
return ko.computed(function() {
...details in link above...
}, this);
}
我倾向于使用这些的组合。我喜欢在虚拟机和映射的单独文件中扩展View Models的原型,所以我有一个像
这样的结构正如您所看到的,这些“答案”之间的时间间隔相当大,所以有些事情发生了变化,但有些事情保持不变。