我正在尝试渲染并将模板(ticket_edit)附加到正文。我需要为新附加的模板设置一个上下文,并且ticket_edit的事件应该绑定到该模板。
代码:
Template.ticket.events = {
'click a.edit' : function (event) {
//when the edit button has been clicked, load template 'ticket_edit'
//with the current context. Please see situation 1 and 2.
}
}
Template.ticket_edit.events = {
'click a.save' : function (event) {
//this won't do anything when i have supplied a context!
}
}
所以问题是:
- 我可以设置上下文,但事件不会绑定到新添加的模板。
- 如果我没有设置上下文,事件就会被正确绑定。
但我需要事件和背景。
情况1:
'click a.edit' : function (event) {
//applying a context to the template will result in events not being bound.
$('body').append(Meteor.render(Template.ticket_edit(this)));
}
作品2:
'click a.edit' : function (event) {
//this way, the events will execute properly and i can save my ticket.
//However, no context is supplied!
$('body').append(Meteor.render(Template.ticket_edit));
}
有没有人有这么好的方法呢?我对Meteor很新,所以也许你有一个更好的动态加载模板的方法。
答案 0 :(得分:2)
不要为此使用jQuery,只需直接使用模板和#with
块。像这样:
<body>
{{> tickets}}
</body>
<template name="tickets">
{{#each tickets}}
{{> ticket}}
{{/each}}
{{#with currentTicket}}
{{> editTicket}}
{{/with}}
</template>
Template.tickets.tickets = function() {
return Tickets.find();
};
Template.tickets.currentTicket = function () {
return Tickets.findOne({ _id: Session.get( "currentTicket" ) });
};
Template.ticket.events({
'click a.edit' : function () {
Session.set( "currentTicket", this._id );
}
});
由于我们使用的是#with
块,因此在您点击修改按钮(在editTicket
中设置"currentTicket"
)之前,Session
模板不会呈现
也可以这样做(没有#with
阻止):
{{> editTicket currentTicket}}
但是这会导致editTicket
始终被渲染,只有在没有任何上下文之后才会设置Session
var。
请注意,因为我们正在使用Session,所以用户不会被重新加载/热代码推送打断。