我使用ko.editables插件进行淘汰赛,并且它似乎没有正确缓存上一个值。有没有人有这个插件的经验?
如果我这样做:
var item = { Name: ko.observable("initial") };
selectedItem = ko.observable(item);
ko.editable(selectedItem);
selectedItem.beginEdit();
selectedItem().Name("second");
selectedItem.rollback();
最终发生的事情是selectedItem()。名称仍然是"秒",即使它应该是" initial"。
我查看了源文件,但是我不太了解JavaScript处理变量的方式,以了解我所看到的是对还是错。
我在ko.editables.js中的以下地方设置了一个断点:
result.rollback = function () {
if (inTransaction()) {
result(oldValue); //breakpoint
inTransaction(false);
}
};
我发现oldValue已经获取了observable的新值,即使commit从未调用过。我尝试过的所有内容都与样本完全一样。我错过了什么?
更新
我已更新代码示例。我的原始代码确实中有ko.editable()行,但感谢Robert.westerland指出它。它仍然无法使用这条额外的线。
答案 0 :(得分: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();