Knockoutjs当父母的可观察变化时更新孩子
当使用KnockoutJs改变父级observable时,如何触发子元素的更新?
在我的应用程序中,我正在构建一个翻译工具。 我有一个挖空类,它代表了一些文本的原始(默认)值,并带有一些已翻译的孩子的集合:
function ParentObject(id, defaultValue) {
var self = this;
self.id = id;
self.defaultValue = ko.observable(defaultValue);
self.children = ko.observableArray();
self.loadChildren = function () {
// standard code to load the children ("lazy load", as I have gobs of data)
}
}
而孩子是
function Child(id, translation, cultureCode) {
var self = this;
self.id = id;
self.cultureCode = cultureCode;
self.translation= ko.observable(translation);
}
父项的defaultValue属性绑定到输入控件。
当我更新父级的默认值时,我想要为每个孩子调用我的翻译服务。 但我对于如何着手有点失落。
(注意,我的例子是从真正的实现中简化的)
编辑:添加到我的defaultValue元素与一个函数,仍然通过旧值:
data-bind=" value: defaultValue, event: {change: updateChildren}"
updateChildren迭代子数组。
这是一个工作示例:JsFiddle
function ParentObject(id, defaultValue) {
var self = this;
self.id = id;
self.defaultValue = ko.observable(defaultValue);
self.defaultValue.subscribe(function(newValue){
ko.utils.arrayForEach(self.children(), function(child) {
alert(child.id);
});
console.log(newValue);
});
self.children = ko.observableArray();
self.loadChildren = function () {
// standard code to load the children ("lazy load", as I have gobs of data)
}
}
function Child(id, translation, cultureCode) {
var self = this;
self.id = id;
self.cultureCode = cultureCode;
self.translation= ko.observable(translation);
}
var vm = function() {
var self = this;
self.parent = new ParentObject(1,10);
self.parent.children.push(new Child(1,"A","1A"));
self.parent.children.push(new Child(2,"B","2B"));
self.parent.children.push(new Child(3,"C","3C"));
}
var viewModel = new vm();
ko.applyBindings(viewModel);
您可以使用订阅功能来侦听可观察到的更改:
self.defaultValue.subscribe(function(newValue){
ko.utils.arrayForEach(self.children(), function(child) {
alert(child.id);
});
console.log(newValue);
});
如果你在孩子身上提到家长的话,你应该可以做些事情。
parent.defaultValue.subscribe(function(newValue){
//do something on child with newValue
});
总体思路在'extenders'http://knockoutjs.com/documentation/extenders.html中解释
链接地址: http://www.djcxy.com/p/50137.html上一篇: Knockoutjs Update child when parent's observable changes
下一篇: Can a Module Pattern object inherit from a Constructor Pattern object?