来自ko.editables的奇怪行为

时间:2014-05-16 22:52:46

标签: javascript knockout.js

我使用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指出它。它仍然无法使用这条额外的线。

1 个答案:

答案 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();