2017-01-10 5 views
2

ノックアウトko.mapping.fromJSについて質問があります。私はko.mapping.fromJSがすべてのプロパティを観測可能にするだけであることを知っています。しかし、私は入力フィールドの値を変更します。示されているように値が変更されても、サブスクライブコールバックは決して実行されません。誰でも助けてくれますか? JSFiddleのコードスニペット。ノックアウトsubscribeコールバックは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

関連する問題