7

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

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

> 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 オブジェクトは作成されていますが、「name」プロパティはマップされません。

どんなアイデアでも大歓迎です!

4

2 に答える 2

11

http://knockoutjs.com/documentation/plugins-mapping.htmlから、toJS()関数について:

これにより、元の JS オブジェクトの一部であったマップされたオブジェクトのプロパティのみを含む、マップされていないオブジェクトが作成されます。

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

var js = ko.mapping.toJS(viewmodel, { include: ['name'] });
于 2012-04-16T13:54:01.947 に答える
3

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

私はそれが少し醜いハックだと言わざるを得ませんが、それは仕事をし、理解するのはとても簡単です:

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

ビューモデルをオブザーバブルからjson、オブザーバブル(すべてのプロパティがマップされた状態)からオブジェクトにマップします。

于 2014-09-25T10:56:57.840 に答える