我有以下部件不更新数据有不同的属性:淘汰赛组件
function Fruit(data) {
this.name = ko.observable(data.name);
this.color = ko.observable(data.color);
}
function Dessert(data) {
this.name = ko.observable(data.name);
this.packaging = ko.observable(data.packaging);
}
function Vm(){
var data = [{name:"Apples",color:"Yellow"},{name:"Cookies",packaging:"Box"}];
this.items = ko.observableArray([new Fruit(data[0]),new Dessert(data[1])]);
this.items.choice = ko.observable(this.items()[0]);
}
这部分工作得很好,每一次我改变文字在我的输入框时的基础数据更新:
<div data-bind="component: {name: 'fruits', params: items.choice}"></div>
现在,我想我的观测的逻辑封装成组件本身,所以我改变了组件是这样的:
ko.components.register('fruits', {
viewModel: function(params) {
this.name = ko.observable(params.name);
this.color = ko.observable(params.color);
},
template: { element: 'fruits-tpl' }
});
...现在我有我的观察到items.choice只只内部数据:
function Vm(){
var data = [{name:"Apples",color:"Yellow"},{name:"Cookies",packaging:"Box"}];
this.items = ko.observableArray(data);
this.items.choice = ko.observable(this.items()[0]);
}
为什么云在主视图模型的基础数据没有更新我的第二个例子,虽然items.choice仍然是观察到的?我确信我错过了一些概念,也许我可观察数组中的每个项目都应该是可观察的,但是我不明白是否有办法让第二个例子工作。
第一个例子:http://jsfiddle.net/5739ht0q/2/ 第二个例子:http://jsfiddle.net/079tx0nn/
你创建你的组件内部观测。他们正在更新。您打印的是传递到组件的数据,并且不会更新。你不能看从你的组件内部创建的数据 –
是的,有没有办法将数据更新回项目数组? – deblocker