8

文字列の ko.observableArray をテンプレートにバインドしようとしていますが、テンプレートが配列内の文字列の変更を取得できません。

文字列のセットではなくオブジェクトのセットをバインドすると、JSON が更新されますが、最初の非配列値を実際に変更するまで何もトリガーされません。ただし、後処理なしでデータモデルをサーバーに直接ポストできるため、文字列の配列を見つけることをお勧めします。

トリガーする文字列の配列の更新を取得するにはどうすればよいですか? また、配列以外の値を更新することなく、変更が正しくトリガーされるようにするにはどうすればよいですか?

監視可能な文字列配列にバインドできない場合、監視可能な配列内のオブジェクトを更新するときにイベントをトリガーするにはどうすればよいですか?

ここの例を参照してください: http://jsfiddle.net/gcEHC/2/

この例では、値が変更されると、array3 のデータがモデルに反映されますが、array1 と array2 のデータへの変更は表示されません。

JS:

var ViewModel = function() {
    this.value = ko.observable("hi")
    this.array1 = ko.observableArray(["hi", "there"]);
    this.array2 = ko.observableArray([ko.observable("hi"), ko.observable("there")]);
    this.array3 = ko.observableArray([{ data: "hi" }, { data: "there" }]);
};

ko.applyBindings(new ViewModel());

HTML:

<div class='liveExample'>   
    <p><input data-bind='value: value' /></p> 
    <div data-bind="foreach: array1">
        <p><input data-bind='value: $data' /></p> 
    </div>
    <div data-bind="foreach: array2">
        <p><input data-bind='value: $data' /></p> 
    </div>
    <div data-bind="foreach: array3">
        <p><input data-bind='value: data' /></p> 
    </div>
</div>

<pre data-bind="text: ko.toJSON($data)"></pre>
4

2 に答える 2

9

KO 3 では、バインディングで $rawData を指定すると、array2 の例が期待どおりに機能します。

于 2014-07-16T18:53:04.030 に答える