2014-11-02 36 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")}) 

    } 

一篇文章被顯示爲彈出。當用戶點擊一篇文章時(從文章列表中),詳細文章(上面的模板)就會顯示一個display:block。

我使用這個事件爲:

Template.articleOverview.events({ 

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

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

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

     } 

    }) 

的問題是,我需要點擊文章2倍。

  • 第一次單擊注入模板進入到DOM
  • 第二次單擊添加類「活動」。

我在這做錯了什麼?

THX,

+0

我能想到的唯一的事情是,當您嘗試向其中添加類時,DOM不會被注入該元素,因爲它需要超過50ms〜'才能構建出來,並且已經調用了addClass。如果你將它封裝在'setTimeout(function(){$('。adArticle')。addClass('active');},1000);'它工作嗎? – Ohgodwhy 2014-11-02 08:29:58

回答

2

的解決方案是相當簡單:

的{{#with articleData}}塊最初是假的,所以模板的HTML並沒有呈現給網頁。

當我點擊一篇文章時{{#with articleData}}返回true(因爲裏面有數據),但是我不得不再次點擊jquery來觸發(添加類.active )。

所以關鍵是在加載頁面時獲取adArticles模板,而不是點擊。要做到這一點,我只是返回true,如果來自數據庫的查詢返回false。

Template.adArticles.articleData = function(){ 

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

    } 

這樣唯一改變的事情是||真正的位,現在一切都按預期工作。不過,如果還有其他解決方案,我真的不知道。