我有以下部件不更新數據有不同的屬性:淘汰賽組件
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