編輯:這個答案here似乎提供瞭解決方案;因爲我是一個懶惰的草皮,並且試圖避免在兩個地方(一次在服務器上,一次在客戶端)定義我的模型,我認爲必須有一種方法。通過在鏈接解決方案中使用自定義綁定,我可以從各種表單元素數據綁定屬性創建觀察對象,所以基本上它會從表單中構建模型。所以它有效地從表格中驅動模型定義。我還沒有決定,如果這是一個壞主意:)淘汰賽視圖模型代表單個對象
我想知道我做錯了什麼(或者甚至如果我甚至上午做任何錯誤)。我需要創建一個表單的時間,剛剛得到了一些簡單的文字/號碼的屬性編輯一個記錄:
{ItemCode:ABCD,LotNumber:1234,ID:4885,MeasuredValue1:90}
我決定用KO與映射插件來做到這一點。我對ko相當陌生。 反正我結束了這樣的視圖模型:
var LotModel = function() {
var self = this;
self.Update = function(itemcode,lotnumber) {
var data = { ItemCode: itemcode, LotNumber: lotnumber }
//DoAjax is just a utility function and is working fine.
DoAjax("POST", "LotHistory.aspx/GetLotHistory", data,
function(msg) {
ko.mapping.fromJS(msg.d, null, self);
ko.applyBindings(self);
},
function(xhr, ajaxOptions, thrownError) {
AjaxFailure(xhr, ajaxOptions, thrownError);
}
);
}
}
,後來我的代碼,
var lm = new LotModel();
終於在$(文件)。就緒現在
ko.applyBindings(lm);
除了如果您在視圖模型中看到的每次加載數據,我都必須在vm的Update函數中重新調用ko.applyBindings(self)。 如果我註釋掉該行,它不會綁定。我認爲,這是因爲我只綁定一個單一的對象(即視圖模型本身就是ko映射插件完成其工作後的對象),但在我讀到的所有關於ko的地方似乎都說「你只需要調用這一次,永遠。「所以我不禁感到我失去了一些非常明顯的東西;在文檔就緒函數中註釋掉ko.applyBindings(lm)並沒有什麼區別,因爲我自動調用document.ready中的lm.Update,但是在viewmodel中註釋掉它。
所以我的問題是 - 我這樣做是錯誤的嗎?對於時間類型綁定中的單個對象是否過分矯枉過正?我的意思是不打擾我太多,它的工作原理,我想它,但仍,這是我嘮叨......
感謝您的幫助。提到不存在的觀察結果給了我一個很大的線索。在這裏找到了一個可能的解決方案[http://stackoverflow.com/questions/6735225/knockout-js-mapping-plugin-without-initial-data-empty-form]。 –