我目前正在Knockout中构建一个重型应用程序。在我的应用程序中有三种类型的数字:百分比,小数和大数字,我有每种类型的自定义绑定处理程序。
对于输入我还创建了一个数字验证bindingHandler,它读取每个按键以确保它是一个输入的数字。 (在应用程序中有华丽的边框CSS动画和东西 - 这只是一个简单的剥离示例)。
现在让输入执行验证检查和数字格式化,我必须将变量绑定两次,正如您在下面的小提琴中正确看到的那样。
<input data-bind="number: testdata, percentage: testdata">
我认为这会不必要地增加我的HTML标记,并且必须有一种更整洁的方式同时触发两个处理程序。
我的问题:是否可以将数字验证脚本创建为一个函数,然后可以在数字格式处理程序中共享/包含该函数;没有膨胀我的Javascript?
我仍然是Knockout的新手,所以我仍然不确定它的界限。
请参阅小提琴:http://jsfiddle.net/axV6S/1/
答案 0 :(得分:2)
是的,你可以将数字init提取到它自己的函数中,即改变它:
ko.bindingHandlers.number = {
init: function (element) {
/* ... */
}
};
进入这个:
var numberInit = function(element) {
/* ... */
};
只需从你的其他初始化调用它:
init: function(element, valueAccessor) {
numberInit(element);
/* ... */
}
或者如果你想保持正确的“这个”背景:
init: function(element, valueAccessor) {
numberInit.apply(this,arguments);
/* ... */
}
答案 1 :(得分:0)
你在淘汰赛中复制了很多内置功能。创建viewmodel时,您可以为模型属性定义限制。你可以为很多数值数据做到这一点:
this.FieldName = ko.observable().extend({ pattern: regex });
这将限制您的文本字段,并且您不需要监听按键,并采取措施。 Knockout会在后台为您做到这一点!
查看更多示例:http://mikedormitorio.azurewebsites.net/BlogPost/the-native-validation-rules-of-knockout-validation
这也是一个有用的读物:http://knockoutjs.com/documentation/extenders.html