Knockout.js 如何映射使用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

不知道如何映射使用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.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();
});