【问题标题】:ApplyBindings Twice, ValidationApplyBindings 两次,验证
【发布时间】:2013-03-05 14:46:27
【问题描述】:

我有一个网格,其中包含多个业务对象。让我们称他们为产品。当您单击该项目时,我会进行 AJAX 调用并获取数据并创建一个绑定到模式“窗口”(使用引导程序)的 Knockout viewModel。用户可以更改产品,例如他们可以将名称更改为其他名称,他们可以点击取消或保存。当用户点击保存/取消时,他们将被带回网格,然后可以单击另一个产品,从而弹出带有新产品的模式(另一个 AJAX 调用以获取数据等)。

好吧,我再次调用了 KO.applyBindings(viewModel)。我想这可能是个坏主意。我注意到的是,如果用户没有输入名称(这是必需的),我会收到两条验证消息,上面写着“需要名称”。所以这告诉我必须绑定两个事件(或某事或其他)。所以我做了几次谷歌搜索,我发现了几篇使用 ko.cleanNode(node) 的文章,如果你要调用 applyBindings 两次。那并没有解决我的问题。我正在使用 knockout.validation.js,并且我还像这样扩展了我的 name 属性:

vm.Name.extend({
        required: { message: 'Name is required.' },
        minLength: 1
    });

是否有清除extend 或unApplyBindings 的方法?还是我只是用错了KO?我真的很喜欢它,但要让它做你想做的事情需要一些时间(这就是他们付钱给我的原因)。如果需要,我也许可以让 Fiddle 来证明这一点..

【问题讨论】:

  • 感谢您的编辑。我会尝试弄清楚如何让代码看起来像这样。
  • 我找到了解决此问题的方法。我不喜欢它,但我需要继续前进。暂时,当我回去编辑另一个对象时,我不再应用绑定,我只是使用从服务器获取的 JSON 对象设置 viewModel 的属性。我设置了一个标志来指示我我已经绑定了一次,所以下次我跳过绑定并执行 viewModel.name(data.name).. 不漂亮但它有效.. 我不认为这个回答,我会回来看看如果有更好的方法来做到这一点..

标签: knockout.js knockout-validation


【解决方案1】:

我知道这是一个老问题,但我遇到了同样的问题。我从 github 站点上的一个示例开始,该示例定义了一个用于显示验证错误的自定义模板。当我把它拿出来时,什么都没有改变,我的异常消失了。

我删除了:

<script id="customMessageTemplate" type="text/html"><!--
    --><em class="customMessage" data-bind="validationMessage: field"></em>
</script>
---
<div class="row" data-bind="validationOptions: { messageTemplate: 'customMessageTemplate' }">

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2012-04-25
    • 2019-08-19
    • 2013-07-19
    相关资源
    最近更新 更多