dro*_*gon 12 jquery-validate knockout.js
我最近创建了一个绑定处理程序,使用数据绑定语法将JQuery Validation插件合并到一个表单中.我发现自己需要向处理程序提供多条信息.我需要提供一个标志来强制执行验证,并在验证通过后触发一个回调.
问题:
提供多个args的最佳做法是什么?我只是依赖于对象表示法语法,但也可以提供另一个绑定并通过传递给处理程序的"allBindings"参数检查绑定...
向处理程序提供回调函数的最佳实践是什么?
下面是定义处理程序的js代码和应用处理程序的html代码:
<form id="step1"
data-bind="jqValidation:{enforce: true,
submitHandler: doSomethingInVM}">
<fieldset data-bind="with:searchRequest">
//fields
</fieldset>
<button type="submit">submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)
ko.bindingHandlers.jqValidation = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var accessor = valueAccessor();
//need unwrapobservable??
if (accessor.enforce) {
$(element).find(':submit').removeClass('cancel');
$(element).validate({
submitHandler: function () {
if ($.isFunction(accessor.submitHandler))
accessor.submitHandler();
}
});
} else
$(element).find(':submit').addClass('cancel');
}
};
Run Code Online (Sandbox Code Playgroud)
你的方法遵循KO本身使用的模式,所以我认为它是完全有效的.当然,你也可以使用allBindingsAccessor.我解释这种方法的用法的方法是
传递处理程序的最佳做法是将它们作为视图模型上的命名成员,而不是内联绑定.
为了回答你的两个问题,强烈建议使用 knockoutjs 和 MVVM 模式时的做法是将与对象相关的属性和方法封装在各自的视图模型中。
也就是说,将负责更新视图模型(或由于视图模型的更改而触发对其他对象的更新)的任何属性(如果愿意的话)和回调方法驻留在视图模型上,效果非常好本身。
然后,在自定义绑定处理程序中,您可以直接从视图模型引用所需的任何属性,以及调用驻留在视图模型上的任何回调函数。
以这种方式封装成员和行为使得对每个视图模型进行单元测试也变得非常简单。
| 归档时间: |
|
| 查看次数: |
7453 次 |
| 最近记录: |