Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该什么时候在DurandalJS中调用jQueryUI装饰函数?_Jquery_Jquery Ui_Durandal - Fatal编程技术网

我应该什么时候在DurandalJS中调用jQueryUI装饰函数?

我应该什么时候在DurandalJS中调用jQueryUI装饰函数?,jquery,jquery-ui,durandal,Jquery,Jquery Ui,Durandal,在viewmodel.js文件中,我想在文本框上绑定一个日期选择器 这是密码 define([ 'jquery', 'durandal/app', 'services/logger', 'jqueryui' ], function ($, app, logger, jqueryui) { function activate() { if (!Modernizr.inputtypes.date) { $('input[type=date]')

在viewmodel.js文件中,我想在文本框上绑定一个日期选择器

这是密码

define([
    'jquery',
    'durandal/app',
    'services/logger',
    'jqueryui'
    ],
function ($, app, logger, jqueryui) {
function activate() {
    if (!Modernizr.inputtypes.date) {
    $('input[type=date]').datepicker({
            dateFormat: 'mm/dd/yyyy'
        });
    }
    return true;
};
var vm = {
    activate: activate
};

return vm;
});
似乎从未调用jquery和jqueryui。我的代码有什么问题?我应该在
activate()
部分或其他地方启动jQuery和jQuery UI方法吗?

找到了解决方案

我应该将jQuery相关语句放在
viewAttached
函数下

function viewAttached() {
    if (!Modernizr.inputtypes.date) {
        $('input[type=date]').datepicker();
    }
};

尽管你的方法可行,但这不是更好的方法

更好的方法是创建自定义绑定()。如果您不想手动进行绑定,那么有一个库(我不使用它,所以我不知道它们是否工作正常)为jqueryui提供了绑定:

无论如何,您的示例的绑定如下所示:

ko.bindingHandlers.datepicker = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        //initialize datepicker with some optional options
        var options = allBindingsAccessor().datepickerOptions || {},
            $element = $(element),
            $btn = $("<button class='btn' type='button'><i class='icon-calendar'></i></button>");
        $element.datepicker(options);
        $element.prop("readonly", true);
        $element.wrap("<div class='input-append' />");
        $element.after($btn);

        $btn.click(function () {
            $element.datepicker("show");
        });

        //handle the field changing
        ko.utils.registerEventHandler(element, "change", function () {
            var observable = valueAccessor(),
                current = $(element).datepicker("getDate");
            observable(current);
        });

        //handle disposal (if KO removes by the template binding)
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            $(element).datepicker("destroy");
        });

    },
    update: function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
            current = $(element).datepicker("getDate");

        if (value - current !== 0) {
            $(element).datepicker("setDate", value);
        }
    }
};
ko.bindingHandlers.datepicker={
init:function(元素、valueAccessor、allBindingsAccessor){
//使用一些可选选项初始化日期选择器
var options=allBindingsAccessor().datepickerOptions | |{},
$element=$(element),
$btn=$(“”);
$element.datepicker(选项);
$element.prop(“只读”,true);
$element.wrap(“”);
$element.after($btn);
$btn.单击(函数(){
$element.datepicker(“show”);
});
//处理字段更改
gisterEventHandler(元素,“change”,函数(){
var observable=valueAccessor(),
当前=$(元素).datepicker(“getDate”);
可观察(当前);
});
//处理处置(如果KO通过模板绑定移除)
ko.utils.domNodeDisposal.addDisposeCallback(元素,函数(){
$(元素)。日期选择器(“销毁”);
});
},
更新:函数(元素、值访问器){
var value=ko.utils.unwrapobbservable(valueAccessor()),
当前=$(元素).datepicker(“getDate”);
如果(值-当前!==0){
$(元素).datepicker(“setDate”,值);
}
}
};
在以下观点中:

<input type="text" id="yourid" data-bind="datepicker: yourobservable, datepickerOptions:{}" />


这不是一个很好的答案。我会一直等待更好的解决方案。不过还是要谢谢你,谢谢你的意见。但是我应该把这个
ko.bindingHandlers.datepicker
语句放在哪里呢?在
函数activate()
?最简单的方法是将其放入javascript文件中,并在include for knockout之后将其包含在脚本包中。那么,为什么您认为这是一个更好的解决方案呢?至少代码更乏味。它提供了性能增强还是什么?因为它强制了视图和视图模型之间的分离,它使您的代码可以重用,正如您在这里看到的,这是一条路:我很想知道在大约18个月前做出这个决定后,您现在对它的感觉如何。viewAttached是一个事件,它虽然方便,但会导致过度使用,并将视图和视图模型紧密地耦合在一起。绑定处理程序解决方案通常被更广泛地接受。这对你有什么影响?