2015-06-23 7 views
0

У меня есть приложение meteor, которое использует Semantic UI. Для этого я использую семантический пакет: ui-css.Semantic UI Modal появляется только один раз в Meteor

У меня есть шаблон, называемый проектом, где я хочу показать модальный. Там для меня создал второй шаблон, который является модальным, как это:

<template name="xform"> 
    <div id="modal" class="ui modal"> 
    <i class="close icon"></i> 
    <div class="header">New Project</div> 
    <div class="content"> 
    <div class="ui form" id="newProject"> 
     <div class="one fields"> 
     <div class="field"> 
      <legend>Project Details</legend> 
      <label>Name</label> 
      <input id="name" name="name" type="text" placeholder="Project name"> 
     </div> 
     <input type="submit" class="button small createProject" style="color:white;position:relative;float:right;padding: 0.875rem 1.75rem 0.9375rem 1.75rem;font-size: 0.8125rem;" value="Create"> 
     </div> 
    </div> 
    </div> 
    <div class="actions"> 
    <div class="ui button"> 
     Cancel 
    </div> 
    <div class="ui button"> 
     Okay 
    </div> 
    </div> 
    </div> 
</template> 

Тогда я haved добавил событие к кнопке, как это, чтобы показать модальный:

Template.projects.events({ 
    'click .newProject': function(event, template){ 
    template.$('.ui.modal').modal({ 
      onDeny : function(){ 
      return false; 
      }}).modal('show'); 
    } 
}); 

Если я нажимаю кнопку в первый раз модальный открывается, как хотелось. Я вижу, что модаль теперь уже не внутри html моего шаблона, а в конце моего тела. Я могу закрыть модальный, используя кнопку закрытия, но когда я теперь попытаюсь открыть его снова, он больше не открывается. Модальный div все еще находится на дне моего тела.

Я пробовал несколько способов обхода этой проблемы, но никто не работал.

Вот мой полный код: http://i.imgur.com/r9JNrlr

+0

Вы в основном ответили на вопрос, семантический ui модальный код перемещает div в нижнюю часть тела, поэтому, когда вы вызываете 'template. $ ('. Ui.modal') ...' вы только ' в шаблоне - в этом случае шаблон «проектов». Самый простой, хотя и не обязательно правильный способ - просто использовать глобальный объект jQuery '$ ('. Ui.modal')'. Не обязательно правильно, я имею в виду, что вы, вероятно, должны ссылаться на него с уникальным атрибутом id, чтобы избежать конфликтов между несколькими модалами. –

+0

Я пробовал это так, как вы только что описали, просто используя jQuery без ссылки на шаблон, но затем я получаю «Uncaught TypeError: $ (...). Modal не является функцией». Я не могу понять, почему это происходит. – Sebi55

+0

Странно, я только что сбил тестовый код, и он отлично работает для меня. Есть ли в вашем шаблоне тег? Удивительно, если это аналогичная проблема для той, которая была решена здесь: http://stackoverflow.com/a/30381769/2723753 –

ответ

1

Чтобы следить за мой комментарий, это код, который работает для меня. Это определенно кажется, что у вас есть проблема с jQuery, находящими несколько элементов. Я создал новый проект метеора:

$ meteor create semantic 
$ cd semantic 
$ meteor add semantic:ui-css 
$ meteor add iron:router 

semantic.html

<template name="MainLayout"> 
    <h1>Title</h1> 
    {{> yield}} 
</template> 

<template name="projects"> 
    {{> xform}} 
    <button class="newProject">New Project</button> 
</template> 

<template name="xform"> 
    <div id="modal" class="ui modal"> 
    <i class="close icon"></i> 
    <div class="header">New Project</div> 
    <div class="content"> 
    <div class="ui form" id="newProject"> 
     <div class="one fields"> 
     <div class="field"> 
      <legend>Project Details</legend> 
      <label>Name</label> 
      <input id="name" name="name" type="text" placeholder="Project name"> 
     </div> 
     <input type="submit" class="button small createProject" style="color:white;position:relative;float:right;padding: 0.875rem 1.75rem 0.9375rem 1.75rem;font-size: 0.8125rem;" value="Create"> 
     </div> 
    </div> 
    </div> 
    <div class="actions"> 
    <div class="ui button"> 
     Cancel 
    </div> 
    <div class="ui button"> 
     Okay 
    </div> 
    </div> 
    </div> 
</template> 

semantic.js

if (Meteor.isClient) { 
    Template.projects.events({ 
    'click .newProject': function(event, template){ 
     $('.ui.modal').modal({ 
      onDeny : function(){ 
       return false; 
      }}).modal('show'); 
    } 
    }); 

    Meteor.startup(function() { 
    Router.configure({ 
     layoutTemplate: 'MainLayout' 
    }) 
    Router.route('/',{ 
     name: 'projects' 
    }) 
    }); 
} 

После запуска meteor и загрузки http://localhost:3000 я могу открыть и закрыть модально несколько раз.

+0

Я изменил строку jquery, чтобы использовать $ ('# modal'), а не класс, который должен помешать этим вещам, но он все еще не работает. – Sebi55

+0

Если я использую console.log ($ ('# modal')) в моем проекте и внутри используемого вами кода (что также работает для меня, очевидно), они оба показывают то же самое, но внутри моего проекта проблема все еще существует. – Sebi55

+0

Я сделал снимок экрана моего кода, может быть, вы нашли мою ошибку. http://imgur.com/r9JNrlr – Sebi55

0

Попробуйте установить модальный несъемный в onRendered функцию обратного вызова шаблона.

Template.projects.onRendered(() => { 
    $('.ui.modal').modal({ detachable: false }); 
}); 

Надеюсь, это поможет.

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