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

如您所见,这是一吨开销。我还想补充一点,映射库对我来说突出的一个好处是,当属性名称发生变化时,它可以减少一个更新的地方。但是,如果您确实必须显式声明属性名称以指定创建回调,那么该好处就被破坏了。

我错了吗,有一种简单的方法可以解决这个问题吗?

4

1 回答 1

1

如果您需要为所有字段设置相同的默认值,您可以构造映射选项动态迭代 alldata的属性:

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 回答