2012-04-16 12 views
6

knockoutは配列内のオブジェクトのプロパティを正しくマッピングしていないようです。ノックアウトでは、配列内のオブジェクトのプロパティがマッピングされていません

はクロームコンソールからこの例を参照してください:

> var viewmodel = ko.mapping.fromJS({list:[]}); 
undefined 

> viewmodel.list().unshift({ name : ko.observable("Foo") }); 
1 

> viewmodel.list()[0].name(); 
"Foo" 

> var js = ko.mapping.toJS(viewmodel); 
undefined 

> js.list[0].name; 
undefined 

をだから、javascriptオブジェクトが作成されているが、「名前」プロパティは、マップされません。

どのアイデアも大歓迎です! toJS()機能についてhttp://knockoutjs.com/documentation/plugins-mapping.htmlから

答えて

11

、:

これは、あなたのオリジナルのJSオブジェクトの一部であったマップされたオブジェクトのプロパティのみを含むマップされていないオブジェクトを作成します。

「名前」はマッピングした元のオブジェクトの一部ではないため、マッピングされません。あなたは、この特定のプロパティを含めるためにマッピング・プラグインを伝える必要があります:

var js = ko.mapping.toJS(viewmodel, { include: ['name'] }); 
+0

すばやくお返事ありがとうございます。すべてのプロパティをマップする動作を変更する方法はありますか?ドキュメントにはこれが言及されていないようです。 –

+0

@RichardAstbury私はそうは思わない。これをカスタマイズしたバージョンのマッピングプラグインにハードコードする必要があります。 – Niko

+2

私はそれ以来、仕事をしているようなko.toJSON(viewModel)を見つけました。 –

3

ニコの答えが正しいですが - 、この問題を克服する方法があります。..

私はそれは醜いのビットだと言っていますハックしかし、それは仕事をしていませんし、それを理解することは非常に簡単です:

ko.mapping.toJS(ko.mapping.fromJSON(ko.toJSON(viewmodel))) 

私が観察にJSONに観察できるからビューモデルをマップ(マッピングされたすべてのプロパティを持つ)オブジェクトへ。

関連する問題