2015-03-19 3 views
-1

Я использую jquery для создания диалогового окна в своем веб-приложении. В обычном приложении я могу использовать jquery для выполнения этой задачи. Но, перейдя на Meteor, похоже, что Meteor изменил многие вещи, которые нормальный javascript не работает. Вот мой код:Метеор: использование JQuery для создания диалогового окна

<template name="post_list"> 
    <button id="ask_question_btn">Ask A Question</button> 
    <div id="dialog" title="Dialog Title goes here...">Custom Dialog</div> 
</template> 

А вот соответствующий JavaScript:

Template.post_list.events({ 
    'click #ask_question_btn': function(event, template) { 
     template.$("#dialog").dialog("open"); 
    } 
}); 

Когда я бегу, не вещь шоу. Я не знаю, как отладить это. Пожалуйста, помогите мне решить эту проблему.

Спасибо :)

+0

Удалить «шаблон» из шаблона. $ ("#dialog") .dialog ("open"); 'для просто' $ ("#dialog") .dialog ("open"); 'Вы уже обращаясь к шаблону, так как вы находитесь в 'Template.post_list.events'. Держу пари, что это исправляет – below9k

+0

Нет. Я изменил, как вы сказали, но все равно никакого эффекта. спасибо :) – hqt

+0

$ ('# dialog') должен хотя бы вернуть объект jQuery. Можете ли вы проверить, так ли это? –

ответ

2

Я не думаю, что функция $ .dialog() является родным для JQuery. Я знаком с jQuery UI dialog function, который вы можете включить в свое приложение, включая любые jQuery UI package от Atmosphere.

Кроме того, в вашем коде вам нужно будет инициализировать диалог перед открытием. Я был в состоянии получить следующую работу с mizzao:jquery-ui пакета:

meteor add mizzao:jquery-ui 

тогда, в моем хелперов файле:

Template.post_list.rendered = function() { // initialize the dialog once rendered 
    $("#dialog").dialog({autoOpen: false}); // autoOpen = false means this won't open until we ask it to 
} 

Template.post_list.events({ 
    'click #ask_question_btn': function(event, template) { 
    $("#dialog").dialog('open'); 
    } 
}); 

Надежда, которая работает для вас. Дайте мне знать, если у вас есть вопросы, я рад помочь.

+0

спасибо :) Это работа. Но есть кое-что, чего я не понимаю. 1) зачем нам нужно инициализировать диалог после рендеринга? Я читал в JQuery-ui guide, который нигде не говорит об этом. 2) Существуют ли различия между двумя пакетами 'mizzao: jquery-ui' и' mizzao: jqueryui'? 3) Я протестировал, загрузив всю библиотеку jquery-ui и поместив ее в папку js и stylesheet. Все работает нормально. Так существуют ли различия между двумя способами использования: использовать пакет meteor или вручную разместить библиотеки javascript в проекте? Спасибо :) – hqt

+0

@hqt 1) Я не вижу, чтобы это упоминалось явно в документации, но если вы посмотрите на примеры (http://api.jqueryui.com/dialog/#entry-examples), вы будете что они инициализируют его. Кроме того, если вы не выполните инициализацию, вы получите сообщение об ошибке в консоли, в которой говорится, что вам нужно это сделать. 2) Не уверен, но я не думаю, что есть разница. Документация для mizzao: jqueryui говорит «meteor add mizzao: jquery-ui», поэтому я предполагаю, что они одинаковы. 3) Я думаю, что это просто удобство; использование пакета должно связывать его с вашим приложением, поэтому вам не нужно устанавливать отдельно, если вы развертываете. –