我已通过以下方式在淘汰赛中定义了订阅功能:
// subscriber for autosave function that is within handler
ko.subscribable.fn.withAutoSave = function (prop, handler) {
var self = this;
//subscribe to changes
this.subscribe(handler.bind(this, self, prop));
return this;
};
这就是我将其附加到属性的方式:
self.CompanyName = ko.observable(data.CompanyName).withAutoSave("CompanyName", saveFieldValueFunction.bind(this, this.Id));
有没有一种方法和正确的语法用于我可以做这样的事情:
1)定义propertyname数组:var propertynames = ['CompanyName', 'Property1', 'Property2' ...];
2)通过所有属性名循环并订阅:
withAutoSave(propertyName, saveFieldValueFunction.bind(this, this.Id));
我将描述为什么我需要这个: 我有一个定义的模型,从2种不同的形式调用。我可以重用它,但对于一种形式我需要“withUpdateSave”,但对于另一种形式我不需要它。所以我想要一个选项来定义我是否需要这个。
答案 0 :(得分:1)
最小阻力的路径可能是向withAutoSave
添加一个布尔参数来确定它是否应该实际执行任何操作,然后将其绑定到viewmodel中的一个observable属性,您可以在代码中设置或清除该属性。显示表格,例如
ko.subscribable.fn.withAutoSave = function (prop, handler, enabled) {
var self = this;
this.subscribe(function () {
// if (enabled()) {
// UPDATED: use ko.unwrap() so enabled can be
// either an observable or an ordinary value
if (ko.unwrap(enabled)) {
handler.call(self, self, prop);
}
});
return this;
};
然后:
self.CompanyName = ko.observable(data.CompanyName).withAutoSave("CompanyName", saveFieldValueFunction.bind(this, this.Id), self.doAutoSave);
然后self.doAutoSave(true)
将启用自动保存,self.doAutoSave(false)
将禁用它