编辑 - 为每条评论添加更多“逼真的代码”。设计目标是所有模型都被视图模型包装,视图模型作为模型的代理。该视图不会直接绑定到模型。此外,我有一个单独的JavaScript类,它将模型发送到服务器或从服务器接收模型,并将其作为依赖注入到视图模型中。如何从视图模型自动更新模型属性?
下面,MessageModel
的content
是用户输入的原始内容和/或服务器返回的内容。 MessageViewModel
公开消息属性,该属性是模型的content
属性的格式化版本。
function MessageModel(id, content, nick) {
var self = this;
self.nick = nick;
self.content = content;
self.id = id;
}
// view needs to bind to properties that only exist on the view model
function MessageViewModel(messageModel, dataService) {
var self = this;
self.id = ko.observable(messageModel.id);
self.message = ko.computed(function() {
// format the content for the view
return messageModel.nick + " <" + messageModel.content + ">";
});
self.saveMessage(function() {
// send the model up to the server
dataService.saveMessage(self.model);
});
self.model = messageModel;
}
与我上面写的,更改视图模型需要推到模型,并从服务器接收模式时,需要被推向反映在视图模型,然后在视图中进行更改。如何在淘汰赛中做到这一点?
,如果你想通过再结合来更新'messageModel.id'它必须是'observable';目前viewModel id是您唯一可观察到的 – house9
@ house9 - 不想通过绑定更新模型。想要通过绑定更新视图模型,然后使用视图模型更新模型。将模型直接耦合到视图并不好。 –
你应该显示更实际的代码。创建一个持有'id'的对象是没有意义的,然后用另一个'id'将它包装到另一个对象中,从而完成两个相关的'id'可观察对象。如果'id'就是你所需要的,我相信你只有一个带有'id'的简单视图模型。所以,请让样本更真实,解释为什么你有一个嵌套模型,当父母的'id'发生变化时你想要发生什么,等等。你能用这些信息改进你的问题吗? – JotaBe