11

I want to implement an observable array and inside that array there should be observable objects (JS object). And In the view I'm iterating this array and getting the object and show the object properties. Let say there is a object like following,

{"name":"john","age":21,"address":"No 25"}

Imagine the observable array is consisting with objects like above.

Then I want to change single property (e.g name) of a particular object and need to see the change on the view.

How can I do this using knockout ?

Thanks.

4

3 に答える 3

9

ユーザーをviewModelに設定し、ノックアウトマッピングでマッピングすると、望ましい結果が得られるはずです。何かのようなもの:

myObservableArray.push(new UserViewModel( {"name":"john","age":21,"address":"No 25"} ));  

var UserViewModel = function(data){
    var self = this;
    ko.mapping.fromJS(data, {}, self);    
}

このようにして、マップされた各プロパティが監視可能になり、それらが変更されると、これがマークアップに反映されます。

于 2013-06-04T10:13:59.400 に答える
2

モデルを監視可能なビュー モデルに変換するには、ko.utils.arrayMapko.mapping.fromJSを使用できます。

var source = [{"name":"john","age":21,"address":"No 25"}];
var vm = ko.utils.arrayMap(source, function (item) {
    return  ko.mapping.fromJS(item)
});

フィドルを見る

于 2013-06-04T11:17:03.463 に答える
2

次のように、データ項目の新しいモデルを定義し、各プロパティを観察可能にするだけです。

var dataItemModel = function (name, age, address) {
    this.name = ko.observable(name);
    this.age = ko.observable(age);
    this.address = ko.observable(address);
}

データを取得したら、それらをループし、dataItemModel(観察可能なプロパティを持つ) を作成してから、このアイテムを に追加しますObservableArray

于 2013-06-04T11:25:30.627 に答える