我知道一個事實,你可以創建2個knockout.js方式綁定。這改變了JavaScript中的模型,一旦你改變視圖和相反。我需要一種方式來通知並將這些更改發送回服務器。所以我非常需要在服務器上發佈帖子。我怎樣才能做到這一點?Knockout.js回發到服務器以更新模型
什麼意思呢,就是我不知需要每當我換一次我的模型,它會自動回發到服務器的更改附加事件處理函數左右。
我知道一個事實,你可以創建2個knockout.js方式綁定。這改變了JavaScript中的模型,一旦你改變視圖和相反。我需要一種方式來通知並將這些更改發送回服務器。所以我非常需要在服務器上發佈帖子。我怎樣才能做到這一點?Knockout.js回發到服務器以更新模型
什麼意思呢,就是我不知需要每當我換一次我的模型,它會自動回發到服務器的更改附加事件處理函數左右。
function MyViewModel() {
var self = this;
self.value1 = ko.observable();
self.value2 = ko.observable();
ko.computed(function() {
$.ajax({
url: '/path/to/server/endpoint',
type: 'POST',
data: {
value1: self.value1(),
value2: self.value2()
}
});
});
}
你不應該需要單獨的 「手動訂閱」 每個視圖模型屬性。只需定義一個ko.computed
。所有ko.computed
都會自動通知他們所依賴的觀察值的更改。在上面的代碼中,計算依賴於值1和value2可觀測量(在data
參數對jQuery $.ajax
功能)。只要observable的值發生變化,包裝的ko.computed
函數就會執行,並將新的值提交給服務器。
我通過JSON做到這一點(僅單程):
加載KO從JSON字符串(例如)結合:
userSettingsModel = ko.mapping.fromJSON('${userSettingsJSON}');
ko.applyBindings(userSettingsModel);
發送改變KO對象返回給服務器(例如):
function saveConferencesFilter() {
// console.log(ko.mapping.toJSON(userSettingsModel));
$.ajax({
type: 'PUT',
url: '/AudioPlace/userSettings/rest',
dataType: 'json',
contentType: 'application/json;charset=UTF-8',
data: ko.mapping.toJSON(userSettingsModel),
success: function (data) {
getConferences();
}
});
}
好吧,我爲正確制定這一令人感到遺憾,但我需要自動更改發送回服務器,而無需最終用戶做任何事情不是改變視圖別的。我只需要在我的模型中更改屬性後添加一些自定義代碼的方法。 – Alecu
沒關係。我已經猜測寫出答案可能不是你正在尋找的。但明顯的答案是目標。 – derlinuxer
手冊訂閱可以被認爲您的視圖模型一樣的綁定。綁定允許您的用戶界面對視圖模型中的更改做出反應,而手動訂閱則允許您的視圖模型對自身的更改做出反應。這可能意味着更新視圖模型中的其他相關對象。
一個常見的例子是通過AJAX觸發的更新,可觀察到的當另一個觀察的變化,當一個複選框被選中或下拉值被改變,如。在這種情況下,手動訂閱的行爲就像異步計算的觀察值。
這個工程 - 差不多。它似乎在頁面首次加載時立即發佈。有什麼辦法可以防止第一次發生? – Shadow
我找到了第一個加載的方法。 '函數MyViewModel(){self.firstload = TRUE; ko.computed(功能{self.value1();如果(firstload)返回firstload =假; $後( 「/路徑/到/端點」,{數據: self.value1();});}}}'(使用http://jsbeautifier.org/:P) – Shadow