Knockout.js Durandal:制作自定义敲除绑定模块
我想将使用composition.addBindingHandler创建的所有自定义绑定移到一个模块中,以保持我的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()调用
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) {
});