Meteor的Session.set导致JQuery代码问题?

我正在使用Meteor 0.5.4我刚刚遇到了Meteor的Session.set()一个奇怪的问题。

我想在用户点击模板实例时显示一个简单的modal dialog。

当用户点击Template实例时,我正在使用Template的事件映射将一些信息设置为Session。

Template.Orders.events({ 'click' : function () { Session.set("OrderName", this.name); } }); 

模态对话模板然后在会话中显示数据集:

 Template.OrderDialogue.OrderName = function() { return Session.get("OrderName"); } 

最后这是我的JQuery代码

 Template.Orders.rendered = function() { jQuery('a[rel*=leanModal]').leanModal(); } 

当我使用Session.set()时 – 如上面在Template.orders的click事件处理程序中所示 – JQuery插件在第一次单击模板实例时不显示modal dialog,但仅在第二次单击该确切实例时显示。 只需点击两次模板实例即可获得模态对话。

当我删除Session.set()时一切正常 – 首次点击时会显示模态对话,因为它应该可以正常工作。

调试输出显示第一次单击时正确设置了会话值。

Session.set()如何干扰我的JQuery插件?

leanModal在Meteor引擎react native地将新内容注入其中之前显示leanModal的HTML内容,因此关键是将leanModal点击包装在setTimeout以确保反应已经发生。

假设你有:

   

而你的javascript:

 Template.Orders.events({ 'click' : function () { Session.set("OrderName", this.name); } }); Template.OrderDialogue.OrderName = function() { return Session.get("OrderName"); } Template.Orders.rendered = function() { $("a[rel*=leanModal]").leanModal(); } 

然后,您必须使用click事件处理程序上的setTimeout来破解leanmodal小部件,以便在事件冒泡之前为反应提供一些时间来呈现OrderName内容。

假设这是脚本 ,请在此脚本中包含click处理程序(从第23行开始),如下所示:

 $(this).click(function(e) { setTimeout(function() { var modal_id = $(this).attr("href"); ... }, 1); });