2

有没有办法为 valueUpdate 创建自定义事件,以便我可以推迟更新模型,直到对象被验证/保存?

文档说:

以下字符串值是最常用的选择:

“改变”......,“keyup”......,“keypress”......,“afterkeydown”......

暗示其他值是可能的,但没有说明我可以在哪里找到完整列表。

我想要一个带有取消按钮的弹出表单(在需要之前在隐藏的 div 中),导致表单被删除而不更新模型。模型应该只在用户按下保存按钮时更新。

(我从这里稍微复制了这个问题- 似乎我不是唯一想要这个的人,但他们没有得到答案)

4

2 回答 2

0

可以选择从 observable 订阅“beforeChange”通知流。这使您有机会在值更改之前对其进行检查。

真正解决模型验证的最明显方法是使用“可写”计算值。这些允许您合并您的验证逻辑

于 2012-05-17T03:42:06.510 回答
0

与文档所暗示的相反,该valueUpdate参数没有“定义 KO 应该使用哪个浏览器事件来检测更改”,默认值为“更改”,它允许您提供一个事件或应该捕获的可能事件列表,除了总是被抓住的“变化”。

相关代码为:

// Always catch "change" event; possibly other events too if asked
var eventsToCatch = ["change"];
var requestedEventsToCatch = allBindingsAccessor()["valueUpdate"];
if (requestedEventsToCatch) {
    if (typeof requestedEventsToCatch == "string") // Allow both individual event names, and arrays of event names
        requestedEventsToCatch = [requestedEventsToCatch];
    ko.utils.arrayPushAll(eventsToCatch, requestedEventsToCatch);
    eventsToCatch = ko.utils.arrayGetDistinctValues(eventsToCatch);
}

这种行为实际上是在:https ://github.com/SteveSanderson/knockout/issues/102 https://github.com/SteveSanderson/knockout/commit/843420a6f801b17dd357880b359a67fa53647999

看起来文档还没有更新。我希望人们在需要时必须要求更改,并且文档告诉他们以下内容:

“事件列表,我们建议包括'change',通过[]禁用自动更新模型”

于 2012-05-17T10:06:50.547 回答