【发布时间】: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