2013-03-17 66 views
1

我有一个网格,其中有几个业务对象。让我们称他们为产品。当你点击这个项目时,我做了一个AJAX调用并获取数据并创建一个绑定到模式“窗口”(使用引导程序)的Knockout视图模型。用户可以更改产品,例如他们可以将名称更改为其他名称,他们可以取消或保存。当用户点击保存/取消时,他们被带回到网格,然后可以点击另一个产品,从而弹出一个新产品的模式(另一个AJAX调用来获取数据等)。ApplyBindings两次,验证

那么我再次调用KO.applyBindings(viewModel)。我想这可能是一个坏主意。我注意到的是,如果用户没有输入名称(这是必需的),我会得到两条验证消息,说“名称是必需的”。所以这告诉我必须绑定两个事件(或其他)。所以我做了几次谷歌搜索,并且我发现了几篇使用ko.cleanNode(节点)的文章,如果你打算两次调用applyBindings。这并没有解决我的问题。我使用knockout.validation.js和我还要name属性是这样的:

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

反正是有清除出延长或unApplyBindings?或者我只是使用KO错误?我非常喜欢它,但需要一段时间才能做到你想做的事(这就是为什么他们付钱给我)。如果需要的话,我也可以让小提琴演示这个..

+0

感谢您的编辑。我会试图弄清楚如何让代码看起来像那样。 – Maccurt 2013-03-17 03:11:09

+0

我发现了一个破解来解决这个问题。我不喜欢它,但我需要继续前进。目前,当我回去编辑另一个对象时,我不再应用绑定,我只是使用从服务器获得的JSON对象设置viewModel的属性。我设置了一个标志来向我表明我已经绑定一次,所以下次我只是跳过绑定,并做viewModel.name(data.name)..不漂亮,但它的工作..我不认为这回答,我会检查回来看看如果有更好的方法来做到这一点.. – Maccurt 2013-03-17 03:13:48

回答

0

我知道这是一个老问题,但我遇到了同样的问题。我开始在github网站上定义一个用于显示验证错误的自定义模板的示例。当我把它拿出来时,没有任何变化,我的例外消失了。

我删除:

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

希望这可以帮助其他人。