使用Materialise和Meteor时,我应该在哪里初始化select?

时间:2015-02-28 16:16:59

标签: javascript jquery meteor materialize

我试图在Meteor上使用Materialise Forms。在Materialise的页面上,它说我应该初始化"选择"输入字段如下:

$(document).ready(function() {
  $('select').material_select();
});

我试过在Meteor.startup上调用它,Template.body.created - 没有用。我收到以下错误:

  

undefined不是一个功能(评估' $('选择')。material_select()')

我应该在哪里初始化它?

2 个答案:

答案 0 :(得分:5)

使用模板的.rendered callback

<template name="hello">
    <select><option>...</option></select>
</template>

然后你可以在你的js文件中有这个

Template.hello.onRendered(function() {
    $('select').material_select();
});

模板在渲染已经被触发后很可能被添加到身体中,这就是为什么渲染的主体不起作用。如果使用.created,DOM尚未呈现。

答案 1 :(得分:1)

Akshat的答案是正确的但是如果它仍然不适合你,可能会有一个问题,订阅尚未解雇或不是每个所需的DOM部分都呈现。然后使用afterflush。

Template.listing.onRendered(function () {
    var template = this;

    template.subscribe('listOfThings', function () {
    Tracker.afterFlush(function() {
       template.$('select').material_select();
    });
  });
});

以下是关于此的对话:https://github.com/meteor/meteor/issues/4401#issuecomment-103340262

文档:http://docs.meteor.com/api/tracker.html#Tracker-flush