2014-05-16 76 views
0

我正在使用ko.editables插件進行挖空,並且它似乎沒有正確緩存以前的值。有沒有人有這個插件的經驗?來自ko.editables的奇怪行爲

如果我做這樣的事情:

var item = { Name: ko.observable("initial") }; 
selectedItem = ko.observable(item); 
ko.editable(selectedItem); 
selectedItem.beginEdit(); 
selectedItem().Name("second"); 
selectedItem.rollback(); 

什麼最終情況是,將selectedItem()名稱仍然是「第二」,即使它應該是「初始」。

我查看了源文件,但我對JavaScript處理變量的方式瞭解不多,不知道我看到的是對還是錯。

我設置ko.editables.js內的下列地點斷點:

result.rollback = function() { 
    if (inTransaction()) { 
     result(oldValue); //breakpoint 
     inTransaction(false); 
    } 
}; 

我發現的是,屬性oldValue已經拿起觀察到的新的價值,即使提交從來沒有叫。我試過的所有東西看起來都和樣品完全一樣。我錯過了什麼?

更新:

我已經更新了代碼示例。我原來的代碼確實有ko.editable()行,但是感謝Robert.westerland指出了它。它仍然不能用這個額外的線。

+0

不熟悉這個插件,只是想說明的考慮,類似的修改/還原行爲[A簡單的編輯模式的Knockout.js(HTTP討論: //www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js.html) – Origineil

+0

我對ko.editable插件瞭解不多,因爲我從來沒有用過它,但是如果你查看ko.editable頁面上的文檔中的示例(repo着陸頁上顯示的自述文件),好像您的代碼應該是'var item = {Name:ko.observable(「initial」)}; ko.editable(item); item.beginEdit(); item.Name(「second」); item.rollback(); console.log(item.Name());'。使用這裏寫的代碼爲我工作,在一個非常快速的測試。 –

回答

0

我知道這是一箇舊帖子,但可能對其他人有用。我想你可能需要在「beginEdit」之前調用「commit」,並且在調用ko.editable時,我還必須包含「true」作爲第二個參數。

你更新的代碼::

var item = { Name: ko.observable("initial") }; 
selectedItem = ko.observable(item); 
ko.editable(selectedItem, true); 
selectedItem.commit(); 
selectedItem.beginEdit(); 
selectedItem().Name("second"); 
selectedItem.rollback();