2013-06-04 65 views
11

観測可能な配列を実装したいが、その配列の内部には観測可能なオブジェクト(JSオブジェクト)が必要です。そして、私はこの配列を反復し、オブジェクトを取得し、オブジェクトのプロパティを表示するビューで。次のようなオブジェクトがあるとしましょう。観測可能な配列内のノックアウト観測可能なオブジェクト

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

観測可能な配列が上記のようなオブジェクトで構成されているとします。

それから私は、特定のオブジェクトの単一財産(例えば名前)を変更し、ビューに変更を確認する必要がしたいです。

どうすればノックアウトできるのですか?

ありがとうございました。

答えて

9

ユーザーをviewModelに設定し、それをknockout mappingとマッピングすると、望ましい結果が得られるはずです。何かのように:

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

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

このように、マップされたプロパティはそれぞれ観測可能になり、変更されるとマークアップに反映されます。

+0

現在のところ、この回答で参照されているプラ​​グインは放棄されているようです。 –

+0

それはKnockout(3.4.0)の最新バージョンでも動作しますが、 –

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) 
}); 

See fiddle

2

単にあなたのデータ項目のための新しいモデルを定義し、各プロパティが観察させる、このような:

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

あなたのデータを取得すると、それらの上ループ、あなたのdataItemModelを作成(観察可能な特性を持っています)、次にこの項目をObservableArrayに追加します。

関連する問題