Knockout共享一个绑定处理程序

lea*_*rrr 5 javascript jquery knockout-2.0 knockout.js

我目前正在Knockout中构建一个重型应用程序.在我的应用程序中有三种类型的数字:百分比,小数和大数字,我有每种类型的自定义绑定处理程序.

对于输入,我还创建了一个数字验证bindingHandler,它读取每个按键以确保它是一个输入的数字.(在应用程序中有华丽的边框CSS动画和东西 - 这只是一个简单的剥离示例).

现在要让输入执行验证检查和数字格式化,我必须将变量绑定两次,正如您在下面的小提琴中正确看到的那样.

<input data-bind="number: testdata, percentage: testdata">
Run Code Online (Sandbox Code Playgroud)

我认为这会不必要地增加我的HTML标记,并且必须有一种更整洁的方式来同时触发两个处理程序.

我的问题:是否可以将数字验证脚本创建为一个函数,然后可以在数字格式处理程序中共享/包含该函数; 没有膨胀我的Javascript?

我仍然是Knockout的新手,所以我仍然不确定它的界限.

见小提琴:http://jsfiddle.net/axV6S/1/

izb*_*izb 2

是的,您可以将数字 init 提取到它自己的函数中,即更改此:

ko.bindingHandlers.number = {
    init: function (element) {
        /* ... */
    }
};
Run Code Online (Sandbox Code Playgroud)

进入这个:

var numberInit = function(element) {
    /* ... */
};
Run Code Online (Sandbox Code Playgroud)

只需从您的其他 init 中调用它,如下所示:

init: function(element, valueAccessor) {
    numberInit(element);
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

或者如果你想保留正确的“this”上下文:

init: function(element, valueAccessor) {
    numberInit.apply(this,arguments);
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)