編輯 - 爲每條評論添加更多「逼真的代碼」。設計目標是所有模型都被視圖模型包裝,視圖模型作爲模型的代理。該視圖不會直接綁定到模型。此外,我有一個單獨的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