2017-01-10 63 views
2

我有一個關於淘汰賽的問題ko.mapping.fromJS。我知道ko.mapping.fromJS不過是讓所有屬性都可觀察。但是,當我更改輸入字段的值時。即使價值改變如上所示,但訂閱回調從未解僱。任何人都可以幫助我嗎?代碼片段JSFiddle淘汰賽訂閱回調不使用時發射ko.mapping.fromJS

HTML:

<tbody> 
    <!-- ko foreach: notes --> 
    <tr> 
    <td class="col-xs-12"> 
     <p data-bind="text: value"></p> 
     <input type="text" class="form-control" data-bind="value: value" /> 
    </td> 
    </tr> 
    <!-- /ko --> 
</tbody> 
<p data-bind="text: show"></p> 

JS:

var notes = [ 
    { 
    "key": "Field1", 
    "value": "Progress" 
    }, 
    { 
    "key": "Field2", 
    "value": "Plan" 
    } 
]; 

function NotesModel() { 
    var self = this; 
    self.notes = ko.mapping.fromJS(notes, {}, self.notes); 
    self.show = ko.observable(''); 
}; 

var notesModel = new NotesModel(); 
ko.applyBindings(notesModel); 

notesModel.notes.subscribe(function(newValue) { 
    notesModel.show(JSON.stringify(newValue)); 
}.bind(notesModel)); 
+1

我的猜測是你正在訂閱一個數組,但改變了數組中對象的個別值,所以它不會觸發事件 – Bindrid

回答

1

Bindrid是正確的。筆記是一個數組,數組並沒有改變,所以沒有理由您的訂閱會被觸發。如果您向notes數組推送新值,則觸發該事件。您必須單獨訂閱每個值或進行計算,以讀取每個元素的值,然後訂閱計算的值。

+0

謝謝Jason和Bindrid。我試圖將新音符推送到數組,並觸發訂閱的事件。 :) – Michael