Twitter bootstrap 如何在Durandal框架内将引导数据采集器与敲除绑定

Twitter bootstrap 如何在Durandal框架内将引导数据采集器与敲除绑定,twitter-bootstrap,knockout.js,datepicker,durandal,Twitter Bootstrap,Knockout.js,Datepicker,Durandal,我不想把这件事扯进去 因此,我尝试使用JSFIDLE,但在Durandal框架中,我将main.js配置为require绑定(请注意可观察的:true): 我使用复合绑定处理程序设置了bindings.js,如下所示: composition.addBindingHandler('datePicker', { init: function (element, valueAccessor, allBindingsAccessor, viewModel) { var unw

我不想把这件事扯进去

因此,我尝试使用JSFIDLE,但在Durandal框架中,我将main.js配置为require绑定(请注意可观察的:true):

我使用复合绑定处理程序设置了bindings.js,如下所示:

 composition.addBindingHandler('datePicker', {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var unwrap = ko.utils.unwrapObservable;
        var dataSource = valueAccessor();
        var binding = allBindingsAccessor();
        var options = {
            keyboardNavigation: true,
            todayHighlight: true,
            autoclose: true,               
            format: 'mm/dd/yyyy'
        };
        if (binding.datePickerOptions) {
            options = $.extend(options, binding.datePickerOptions);
        }
        $(element).datepicker(options);
        $(element).datepicker('update', dataSource);
        $(element).on("changeDate", function (ev) {
            var observable = valueAccessor();
            if ($(element).is(':focus')) {
                // Don't update while the user is in the field...
                // Instead, handle focus loss
                $(element).one('blur', function (ev) {
                    var dateVal = $(element).datepicker("getDate");
                    observable(dateVal);

                });
            }
            else {
                observable(ev.date);

            }
        });
        //handle removing an element from the dom
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            $(element).datepicker('remove');
        });
    },
    update: function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        $(element).datepicker('update', value);
    }
});
虽然这在JSFIDLE中有效,但在Durandal框架中使用代码时会抛出一个错误

视图出现,我可以使用datepicker,但它在以下行中抛出错误:

 observable(dateVal);

有人知道如何利用Durandal的观测值来实现这一点吗?

你能发布你的提琴吗?不幸的是,我没有提琴。如果你看我文章中的链接,你会看到一个指向我复制的小提琴的链接,但我无法让它在Durandal框架内工作,正如我试图在上面解释的那样。你在调试器中得到了什么反馈?您使用的是什么版本的Durandal?我的第一条攻击线可能是将observable插件设置为
false
,并使用标准的击倒观察值来尝试这一点。另外,我还需要更多地了解您是如何在Durandal中实现这一点的。Durandal默认情况下使用敲除进行数据绑定,那么,您使用插件有什么特别的原因吗?Brett,Eric——谢谢你的回答,但我还没有深入了解Durandal,但据我所知,这被认为是设置可观察性的最佳实践:确实如此,Durandal启动了所有事情的getter/setter,但我不想偏离正轨。有人有使用Durandal框架和日期选择器的工作示例吗?
 observable(dateVal);