Knockout.js 如何映射使用ko.viewmodel计算的字段
不知道如何映射使用ko.viewmodel计算的字段有人知道它是如何完成的吗?非常感谢您的帮助Knockout.js 如何映射使用ko.viewmodel计算的字段,knockout.js,knockout-viewmodel-plugin,Knockout.js,Knockout Viewmodel Plugin,不知道如何映射使用ko.viewmodel计算的字段有人知道它是如何完成的吗?非常感谢您的帮助 var model = { firstName: "Le gatêau", lastName: "Chien", items: ['J-Rock', 'J-Pop'], itemselected: 'J-Pop', all: function(){ return firstName + ', ' + lastName + ', ' + itemselected
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.computed当要将贴图识别为一个计算对象时,该对象被定义为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);
我的密码在这里
编辑2:
感谢您的回复,我在最后的代码中加入了我想要的功能:
JS:
HTML:
Comida:
音乐:
最后的演示在这里这很棘手,你可以这样做,但我不确定这是最好的解决方案: 基本上,创建视图模型后,需要手动映射该函数:
var viewModel = ko.viewmodel.fromModel(model);
viewModel.all = ko.observable(model.all());
然后,当您更新时,您可以:
ko.viewmodel.updateFromModel(viewModel, updatedModel);
viewModel.all(updatedModel.all());
请注意,您的函数实际上并不工作,需要更改:
all: function(){ return this.firstName + ', ' + this.lastName + ', ' + this.itemselected }
或者,只要all
函数始终相同,就可以将ko.computed
添加到视图模型中:
var viewModel = ko.viewmodel.fromModel(model);
viewModel.allComp = ko.computed(function() {
return viewModel.firstName() + ', ' + viewModel.lastName() + ', ' + viewModel.itemselected();
});
然后绑定到它,而不是all
。这还有一个额外的优点,就是当您更新绑定时,它就可以工作了
如果我没有弄错您的问题,您需要在您的模型上有一个
ko.computed
属性。ko.viewModel
pluggin提供了控制viewModel的选项。使用extend
选项创建计算属性all
,而不是直接添加到对象。我已经为同样的问题创建了一个提琴:.不确定您在这里要问什么,但计算属性必须是ko.computed
,才能识别它。非常感谢您现在我明白了。非常感谢您,您的答案正是我想要的
all: function(){ return this.firstName + ', ' + this.lastName + ', ' + this.itemselected }
var viewModel = ko.viewmodel.fromModel(model);
viewModel.allComp = ko.computed(function() {
return viewModel.firstName() + ', ' + viewModel.lastName() + ', ' + viewModel.itemselected();
});