Jquery ui Meteor.js中的Jquery日期选择器
我试图在我的项目中使用jquery datepicker,但我想在用户处于编辑模式时显示它。当我在没有if语句的情况下使用它时,它工作得很完美,但当我在if语句中使用它时,它不会呈现。我怎样才能解决这个问题 这是我的模板的一部分Jquery ui Meteor.js中的Jquery日期选择器,jquery-ui,meteor,Jquery Ui,Meteor,我试图在我的项目中使用jquery datepicker,但我想在用户处于编辑模式时显示它。当我在没有if语句的情况下使用它时,它工作得很完美,但当我在if语句中使用它时,它不会呈现。我怎样才能解决这个问题 这是我的模板的一部分 {{#if editing_duedate}} <input class="datepicker" name="date"> {{else}} <div class="row text-center"&g
{{#if editing_duedate}}
<input class="datepicker" name="date">
{{else}}
<div class="row text-center">
<div class="eventduedate">
{{duedate}}
</div>
</div>
{{/if}}
这是我的模板事件
Template.assignmenttodositem.events({
......
'dblclick .eventduedate':function(evt,tmpl){
evt.preventDefault();
Session.set('editingduedate', this._id);
}
..........
这是我检查语句是否正确的地方
Template.assignmenttodositem.editing_duedate = function () {
return Session.equals('editingduedate', this._id);
};
渲染模板时,
仅执行一次。
在此期间,else
部分未被放入HTML,因此无法找到.datepicker
。
您需要检查editinduedate
变量是否已更新,然后创建日期选择器组件
Template.assignmenttodositem.rendered = function() {
var self = this;
this.autorun(function(){
if(Session.equals("editingduedate", self.data._id )){
$('.datepicker').datepicker();
}
})
};
HTML
在DOM中插入模板实例时,呈现的
回调只执行一次:在包含#if
语句的封闭模板中触发日期选择器
初始化,因为执行时,我们处于else
状态,因此输入还不存在
为了简单地解决这个问题,只需将datepicker移动到它自己的模板中(这在编程中一直被认为是一种很好的设计模式,只要可以,就可以将主要任务分解为更小、更容易解决的任务),这样,它的呈现回调将在适当的时间执行。将日期选择器放入它自己的模板中。然后在template.datepicker.rendered中初始化日期选择器。如果您忘记了“this”上下文,它将不起作用。确保template.datepicker.rendered包含以下内容
this.$('#datepicker').datepicker();
其中#datepiker指html中日期选择器的id='datepicker'
<template name="assignmenttodositem">
{{#if editing_duedate}}
{{> datepicker}}
{{else}}
...
{{/if}}
</template>
<template name="datepicker">
<input class="datepicker" name="date">
</template>
Template.datepicker.rendered=function(){
this.$('.datepicker').datepicker();
};
this.$('#datepicker').datepicker();