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
以确保反应已经发生。
假设你有:
{{OrderName}}
{{#each order}} {{name}} {{/each}}
而你的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); });