我正在使用knockout.js。我創建了一個視圖模型,說testViewModel
只有1可觀察到的屬性testProperty
。如何檢測knockout.js中除change事件以外的更改
function testViewModel()
{
var self = this;
self.testProperty = ko.observable("Initial");
}
比我創建了一個span
其中的testProperty
改變值被反射和input text field
,使我們可以改變testProperty
值。
<span data-bind="text: testProperty"></span><br />
<input type="text" data-bind="value: testProperty" />
我創建了一個Example Fiddle。看來,當在輸入文本字段執行focusOut事件的觀察到的屬性值被更新。
現在我的問題是我們可以改變觀察到的屬性值更新事件從焦點到別的東西。我還創建了一個保存按鈕。只有在保存按鈕按下時纔有更新observable屬性值的方法。
我想創造一個用戶可以創建並保存其個人資料,並可以編輯保存profile.I正在使用相同的可觀察性的應用程序創建和編輯的形式和這些屬性是可觀察的。所以當用戶編輯它的配置文件時,用戶應該不更新 ,直到用戶按下保存按鈕。這是我的目標。請幫我解決這個問題?
感謝您的回覆,但我有很多屬性,所以這是一個很好的做法,使屬性數加倍(意味着創建每個屬性的副本)? –
@TomRider:處理它的另一種方法是創建兩個單獨的模型。如果頁面具有不同的父DOM元素,則可以在頁面上綁定多個模型。然後,您可以將一個綁定爲可編輯,另一個綁定爲顯示。單擊保存時,只需將可編輯的值複製到顯示的一個。或者更好,但只是[克隆它](http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-a-javascript-object)。比每個變量有兩個副本更容易一些? –
@TomRider:我在答案中增加了另一個版本,通過保留兩個模型來消除複製每個屬性的複雜性。只要您可以將每個模型綁定到不同的DOM元素,它就會工作。或者,您可以將它們嵌套在單個父視圖模型中,以消除該限制。 –