现在,我可以简单地使用默认值来初始化一堆observable ......
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)
};
你可以看到的是开销很大。我还想补充一点,使用映射库突显我的一个好处是,这使得在属性名称更改时可以减少一个更新位置。但是,如果确实必须明确声明属性名称以指定创建回调,那么这种好处就会失败。
我错了,有一种简单的方法可以解决这个问题吗?
答案 0 :(得分: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);
};