Knockout.js Durandal:制作自定义敲除绑定模块

Knockout.js Durandal:制作自定义敲除绑定模块,knockout.js,durandal,Knockout.js,Durandal,我想将使用composition.addBindingHandler创建的所有自定义绑定移到一个模块中,以保持我的main.js方法干净。我将它们移动到一个文件lib/binding/binding.js,如下所示,在requirejs.config()中为该文件创建了一个别名binding,并将调用替换为对require('binding')的调用。但是,此代码引发错误尚未为上下文加载模块名“binding”:。使用require([])。如何更改此代码以正常工作 app.start()调用

我想将使用composition.addBindingHandler创建的所有自定义绑定移到一个模块中,以保持我的
main.js
方法干净。我将它们移动到一个文件
lib/binding/binding.js
,如下所示,在
requirejs.config()
中为该文件创建了一个别名
binding
,并将调用替换为对
require('binding')
的调用。但是,此代码引发错误
尚未为上下文加载模块名“binding”:。使用require([])
。如何更改此代码以正常工作

app.start()调用

app.start().then(function() {
    //Replace 'viewmodels' in the moduleId with 'views' to locate the view.
    //Look for partial views in a 'views' folder in the root.
    viewLocator.useConvention();

    require('binding'); 
    //PRIOR: var composition = require('durandal/composition');
    //PRIOR: composition.addBindingHandler() calls that now live in lib/binding/binding.js.

    $.when(config.init()).then(function () {
        //Show the app by setting the root view model for our application with a transition.
        app.setRoot('viewmodels/shell'); 
    })

});
lib/binding/binding.js(可能不重要,但为了完整性而包括在内)

;(功能(定义){
定义(['durandal/composition','knockout','datepicker'],函数(composition,ko,datepicker){
//在此声明之后,以下代码最初驻留在main.js中:
//var组合=要求(“durandal/组合”);
//隐藏:与“可见”相反。
composition.addBindingHandler('hidden'{
更新:函数(元素、值访问器){
var value=ko.utils.unwrapobbservable(valueAccessor());
update(元素,函数(){return!value;});
}
});
//datepicker:具有日期选择器的可重用表单元素。
composition.addBindingHandler('datepicker'{
init:函数(元素、值访问器){
变量输入=$(“”);
变量span=$(“”);
input.datepicker();
input.appendTo(元素);
span.追加到(元素);
}
});
});
})();

我通常只是将绑定包装在一个空模块中,该模块不会返回任何类似的结果-

define([],
    function () {

        // Convert any date to a MM-DD-YYYY format with moment.js
        ko.bindingHandlers.Date = {
            update: function (element, valueAccessor) {
                var value = valueAccessor();
                var date = moment(value());
                var strDate = date.format('MM/DD/YYYY');
                $(element).text(strDate);
            }
        };
    });
然后只需要在shell.js模块中使用它

define(['services/bindings'], function (bindings) {

});
这就是你需要做的。简而言之,您只是使用模块将自定义绑定注册到Knockout实例上

define(['services/bindings'], function (bindings) {

});