2015-02-28 4 views
3

Я пытаюсь использовать Materialize Forms на Meteor. На странице своего материализуются в это говорит, что я должен инициализировать «выбрать» поле ввода, как это:Где я должен инициализировать выбор при использовании Materialize и Meteor?

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

Я попытался назвать это на Meteor.startup, Template.body.created - ничего не получалось. Я получаю следующее сообщение об ошибке:

undefined is not a function (evaluating '$('select').material_select()')

Где его инициализировать?

ответ

5

Использование в шаблоне .renderedcallback

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

Тогда вы можете иметь это в ваших JS файл

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

шаблон добавляется к телу, скорее всего, после оказанной уже уволили Так вот почему тело оказано не работает. Если вы используете .created, DOM пока не отображается.

+0

Это здорово, но это не удается, когда выбор оказывается динамически (то есть, не тогда, когда шаблон первой загрузке, но позже). В этом случае этот бит кода должен быть вызван * после * выбор был отображен ... если у кого-то нет лучшей идеи. – Marc

1

Ответ Akshat верен, но если он по-прежнему не работает для вас, может возникнуть проблема с подпиской, которая не уволена или не всякая необходимая часть DOM beeing rendered. Затем используйте 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

Смежные вопросы