不知道我怎么能映射使用ko.viewmodel计算的字段,任何人都知道它是如何完成的?非常感谢任何帮助。
var model = {
firstName: "Le gatêau",
lastName: "Chien",
items: ['J-Rock', 'J-Pop'],
itemselected: 'J-Pop',
all: function(){ return firstName + ', ' + lastName + ', ' + itemselected },
};
编辑:
很遗憾,我不清楚我正在编辑问题,我正在使用ko.viewmodel插件将对象转换为ko模型,但未将其转换为ko.compute对象,当将地图识别为一个时,该对象已定义为ko计算:
var updatedModel = {
firstName: "El pastel",
lastName: "Perro",
items: ['Pop', 'Rock'],
itemselected: 'Rock',
all: function(){ return firstName + ', ' + lastName + ', ' + itemselected },
};
var viewModel = ko.viewmodel.fromModel(model);
ko.applyBindings(viewModel);
我的代码补全在这里DEMO
编辑2:
感谢您的答复,我在最终代码中添加了所需的功能:
JS:
var options = {
extend: {
"{root}": function (m) {
m.all = ko.computed(function () {
var item = ko.utils.arrayFirst(m.music(), function (g) {
return g.id() == m.selected();
});
if (item == null) return '';
return m.like() + ' ' + item.name();
});
}
}
};
var m1 = '{"like":"Pastel","music":[{"id":1,"name":"J-Pop"},{"id":2,"name":"J-Rock"},{"id":3,"name":"Rock"}],"selected":"3"}';
var m2 = '{"like":"Gatêau","music":[{"id":1,"name":"J-Pop"},{"id":2,"name":"J-Rock"},{"id":3,"name":"Rock"}],"selected":"2"}';
var viewmodel = ko.viewmodel.fromModel(JSON.parse(m1), options);
ko.applyBindings(viewmodel);
setTimeout(function () {
console.clear();
ko.viewmodel.updateFromModel(viewmodel, JSON.parse(m2));
}, 2300)
HTML:
Comida:
<input data-bind="value: like" />
<br/>Musica:
<select data-bind="options: music, optionsText: 'name', optionsValue: 'id', value: selected"></select>
<br/>
<h1 data-bind="text: all"></h1>
最后的演示在这里最终演示
如果我的问题正确,那么您需要ko.computed
模型上的属性。该插件ko.viewModel
提供options
了控制您的viewModel的功能。使用该extend
选项来创建计算属性,all
而不是直接添加到对象。我为此创建了一个小提琴:http : //jsfiddle.net/sublimejs/L6Wm3/8/。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句