我最近在很多项目中使用了 Knockout.js,并且编写了很多重复的代码。我希望能够定义一个BaseViewModel
类并让我的特定于页面的 ViewModel 继承它。我对 Javascript 如何做到这一点有点困惑。这是我的基本BaseViewModel
:
(function (ko, undefined) {
ko.BaseViewModel = function () {
var self = this;
self.items = ko.observable([]);
self.newItem = {};
self.dirtyItems = ko.computed(function () {
return self.items().filter(function (item) {
return item.dirtyFlag.isDirty();
});
});
self.isDirty = ko.computed(function () {
return self.dirtyItems().length > 0;
});
self.load = function () { }
};
}(ko));
我希望能够列出类似方法的签名load
in the BaseViewModel
然后在继承的 ViewModel 中给它们定义。这有可能吗?我在网上找到了一些解决方案,但它们都依赖于定义函数/类来使继承起作用。
自从你的BaseViewModel
只是将所有属性/方法添加到this
(并且不使用原型)那么这很简单:
在您的新视图模型中,只需调用BaseViewModel
:
var MyVM = function () {
var self = this;
ko.BaseViewModel.call(self);
self.somethingElse = ko.observable();
self.itemCount = ko.computed(function() { return self.items().length; });
self.items([1, 2, 3]);
};
// ...
var vm = new MyVM();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)