2014-11-02 3 views
1

У меня есть этот шаблон, который представляет собой корпоративную статью.Метеор: работа со всплывающими окнами и модалами

<template name="articleDetail"> 

<section class="articles"> 

    {{#with articleData}} 

    <article> 

     <div> 

      <div> 

       <div class="logo">{{logo}}</div> 
       <div class="name">{{name}}</div> 

      </div> 

     </div> 

    </article> 

    {{/with}} 

</section> 

Этот шаблон получает данные из этого помощника:

Template.articleDetail.articleData = function(){ 

     return articleDB.findOne({_id:Session.get("clickedOnArticle")}) 

    } 

Статья отображается в виде всплывающего окна. Когда пользователь нажимает на статью (из списка статей), детальная статья (шаблон выше) отображается с отображением: block.

Я использую это событие для этого:

Template.articleOverview.events({ 

     "click .article":function(event, template){ 

      Session.set("clickedOnArticle", event.currentTarget.getAttribute("data-article-id")) 

      $(".adArticle").addClass("active") 

     } 

    }) 

Проблема заключается в том, что я должен щелкнуть 2 раза по статье.

  • Первый щелчок вводит шаблон в к йоту
  • Второй щелчок добавляет класс «активный».

Что я здесь делаю неправильно?

ТНХ,

+0

Единственное, что я могу придумать, это то, что DOM не вводится этим элементом, когда вы пытаетесь добавить к нему класс, так как он требует больше, чем '50ms ~' для построения, и addClass уже вызван. Если вы завернете его в 'setTimeout (function() {$ ('. AdArticle'). AddClass ('active');}, 1000);' это работает? – Ohgodwhy

ответ

2

Решение было довольно просто:

на {{#with articleData}} блок был изначально ложным, так что HTML шаблона не было вынесено на страницу.

Когда я нажал на статью, {{#with articleData}} вернул true (потому что теперь там были данные), но мне пришлось нажать второй раз, чтобы запустить jquery (чтобы добавить класс .active).

Таким образом, ключ должен был получить шаблон adArticles на странице при загрузке, а не при щелчке. Для этого я просто вернул true, если запрос из db вернул false.

Template.adArticles.articleData = function(){ 

     return tikiDB.findOne({_id:Session.get("clickedOnArticle")}) || true 

    } 

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

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