Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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
Javascript .Durandal激活函数内部的datepicker调用不工作_Javascript_Jquery_Durandal - Fatal编程技术网

Javascript .Durandal激活函数内部的datepicker调用不工作

Javascript .Durandal激活函数内部的datepicker调用不工作,javascript,jquery,durandal,Javascript,Jquery,Durandal,我在一个视图中编写它,然后尝试对结果调用.datepicker(),但什么也没发生 组合容器 <div> <!--ko compose: { model:'viewmodels/schedule', view: 'views/schedule.html', activate:true} --> <!--/ko--> </div> 控制台记录“已激活的计划模块”,但未创建日期选择器。 如果我转到chrome控制台并运行jQuery调用, $('.s

我在一个视图中编写它,然后尝试对结果调用.datepicker(),但什么也没发生

组合容器

<div>
<!--ko compose: { model:'viewmodels/schedule', view: 'views/schedule.html', activate:true} -->
<!--/ko-->
</div>
控制台记录“已激活的计划模块”,但未创建日期选择器。 如果我转到chrome控制台并运行jQuery调用,
$('.schedule editor').datepicker()它会很好地调出日期选择器


Durandal文档声称,激活函数是在DOM完全合成后调用的,因此我不知道还可以尝试什么。

就像nemesv提到的那样,您应该改用它

激活发生在模型数据绑定到新视图之前以及视图添加到dom之前的生命周期中。viewAttached发生在将视图数据绑定到模型并附加到dom之后

编辑
Durandal 2.0已将
viewAttached
重命名为
attached

还有另一种方法符合knockout.js和Durandal所追求的声明式UI理念

它将允许您在HTML中声明日期选择器,如下所示:

<div class="schedule-editor" data-bind="
    jqueryui: { 
        widget: 'datepicker', 
        options: { 
            // you can set options here as per the jquery ui datepicker docs
        } 
    }">

</div>

只需包括以下要点中的jquery ui小部件绑定:


请确保在加载jquery、jquery ui和knockout之后包含上述javascript。

尝试将jquery逻辑放入
viewAttached
方法中,而不是
activate
方法。我刚刚测试了这一点,在我将jquery更改为原始调用,执行$(view)后,它工作了。find没有工作。否则,现在就可以工作了,感谢guysJust提醒,durandal 2.0中的“viewAttached”已重命名为“attached”,因此在该版本中使用该名称。与以前的方法相比,更喜欢此方法,因为它可以保持VM干净。对于特定于ui的处理,我想它应该是一个自定义绑定,它也支持击倒?
define([], function () {
    var vm = {
        activate: activate,
    };
    return vm;

    function activate() {
        $('.schedule-editor').datepicker();
        console.log("activated schedule module");
        return true;
    }
});
define([], function () {
    var vm = {
        viewAttached: viewAttached,
    };
    return vm;

    function viewAttached(view) {
        $(view).find('.schedule-editor').datepicker();
        console.log("activated schedule module");
        return true;
    }
});
<div class="schedule-editor" data-bind="
    jqueryui: { 
        widget: 'datepicker', 
        options: { 
            // you can set options here as per the jquery ui datepicker docs
        } 
    }">

</div>