2

今のところ、一連のオブザーバブルをデフォルトで簡単に初期化できます...

self.a = ko.observable(data.A || "");
self.b = ko.observable(data.B || "");
self.c = ko.observable(data.C || "");

しかし、もし私が次のようなことをしたいなら

var ViewModel = ko.mapping.fromJS(data) 

そして、デフォルトを設定します。どうすればよいですか?

実際に次のようなことをしなければなりませんか

var ViewModel = function(data) {
   ko.mapping.fromJS(data, {
     c: {
       create: function(options) { return ko.observable(options.data.c || "") }
     };
   }, this)
};

ご覧のとおり、これは大量のオーバーヘッドです。また、マッピング ライブラリで際立っていた利点の 1 つは、プロパティ名が変更されたときに更新する場所が 1 つ少なくなったことです。しかし、create コールバックを指定するためにプロパティ名を明示的に指定する必要がある場合、その利点は失われます。

私は間違っていますか?これをカバーする簡単な方法はありますか?

4

1 に答える 1

1

すべてのフィールドに同じデフォルト値を設定する必要がある場合は、すべてdataのプロパティを動的に反復するマッピング オプションを構築できます。

var ViewModel = function(data) {
    var mappingOptions = {};
    for (var key in data) {
        mappingOptions[key] = {
            create: function(options) {
                return ko.observable(options.data || "123");
            }
        };           
    }

    ko.mapping.fromJS(data, mappingOptions, this);
};

ここにフィドルが働いています:http://jsfiddle.net/vyshniakov/tDAGU/

于 2012-11-08T15:05:26.017 に答える