Meteor 使用Iron路由器、Jquery和Materialize进行组件初始化

Meteor 使用Iron路由器、Jquery和Materialize进行组件初始化,meteor,iron-router,materialize,Meteor,Iron Router,Materialize,正在为一个简单的$document而挣扎。准备好了 不知道我做错了什么 Materialize需要在DOM就绪时初始化jquery组件。找到一种在所有视图上初始化组件的方法是非常棘手的 这是网上的 通过阅读文档:这应该初始化子模板所需的所有内容: Template.layout.rendered = function(){ $('ul.tabs').tabs() } } 但是,这只适用于硬页面刷新,而不适用于路由视图的链接 因此,您必须在将要使用的每个模板上初始化该元素 Tem

正在为一个简单的$document而挣扎。准备好了

不知道我做错了什么

Materialize需要在DOM就绪时初始化jquery组件。找到一种在所有视图上初始化组件的方法是非常棘手的

这是网上的

通过阅读文档:这应该初始化子模板所需的所有内容:

Template.layout.rendered = function(){ 

  $('ul.tabs').tabs() 

  }
}
但是,这只适用于硬页面刷新,而不适用于路由视图的链接

因此,您必须在将要使用的每个模板上初始化该元素

Template.x.rendered ...

Template.y.rendered ...
这是你的电话号码

顺便说一句,我们尝试了iron路由器事件:

onRun

onBeforeAction

onAfterAction
所有这些似乎都发生在路由模板内容出现之前。我注意到onBeforeAction需要对此进行调用。接下来,我甚至尝试在下一次调用后查找DOM内容

我还试着像这样改写我们的路线:

Router.route('someRoute', function() {
  this.render('someRoute');
  // look for DOM content, still not found
});

需要明确的是,发生这种情况的原因是您的布局只触发了一次渲染挂钩。切换管线时,布局模板不会重新招标,只会重新招标屈服区域中的模板。该区域中的上一个模板将被销毁,下一个模板将被重新引用。这意味着您必须运行$'ul.tabs'。当模板包含的DOM元素被重新引用时,该模板的选项卡将再次运行

将该代码放入使用它的模板的呈现函数中是有效的,因为每次该特定模板再次呈现时,该呈现挂钩都会运行


解决这个问题的一种方法是专门为选项卡创建一个模板,就像一个控件,它在自己的呈现函数中调用$'ul.tabs'。tabs。然后你可以把这个控件放在一个需要它的模板上,并传递所需的参数,比如标签的数量和每个标签的内容等等。不过,这是一个工作,如果我有一个使用Tab控件的模板,我只会考虑它。

谢谢清理,EthaanHi Jon,谢谢。但meteor中必须有一种方法可以在通用模板上初始化脚本。我以为那就是body.rendered的目的。有什么想法吗?我一直在尝试让materialbox图像工作,自从我添加了iron router后,它只在单击时工作,在刷新页面之前不会再次工作。我已经把初始化代码放在了我的成品中的一个模板的onRendered中,这就是你所说的,如果我对你的理解正确的话,应该可以工作。有什么想法吗?