Javascript .Durandal激活函数内部的datepicker调用不工作
我在一个视图中编写它,然后尝试对结果调用.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
<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>