簡體   English   中英

把手幫手的流星渲染

[英]Meteor Force Rerender of Handlebar Helpers

在Meteor中,我有一個帶有自定義車把方法的導航欄,該方法確定選項卡是否處於活動狀態。

JS:

Handlebars.registerHelper('getClass',function(a){
    url = document.URL.split("/"); //e.g. http://test.com/something, so 3rd value will have link thing
    url = "/" + url[3];
    val = Router.path(a);
    return url == val ? "active" : "";
});

HTML片段:

  <li class="{{getClass 'homepage'}}"><a href="{{pathFor 'homepage'}}">Home</a></li>
  <li class="{{getClass 'content'}}"><a href="{{pathFor 'content'}}">Content</a></li>
  <li class="{{getClass 'items'}}"><a href="{{pathFor 'items'}}">Items</a></li>

如果我打開一個全新的選項卡,導航到類似http://localhost:3000/content這將在導航塊上設置適當的active類。 但是,如果我僅單擊一個新選項卡,它將不會更新active類。 例如,從主頁到content頁面。 但是,如果我單擊items選項卡,然后單擊另一個選項卡,它將更新,但只會更新一次。 因此,如果我轉到項目標簽,則items將具有活動的班級,而我單擊的下一個班級將獲得它,並將其從items刪除。 不幸的是,這只能運行一次。 我認為這是因為items具有數據庫中的內容,但是我不確定。 無論如何,如果可能的話,我需要一種重新渲染車把幫手的方法。

我嘗試使用以下JS無效:

Content = {};
Content._dep = new Deps.Dependency;

Template.header.events({
  'click a': function () {
      console.log('abc');
    Content._dep.changed();
  }  
})

是否有人無需重新加載頁面即可重新渲染車把?

謝謝。

我剛剛修好了。 基本上,我添加了一個具有隨機數的會話,並在點擊后對其進行了更新。 看來已經成功了。

更新的代碼:

Handlebars.registerHelper('getClass',function(a){
    url = document.URL.split("/"); //e.g. http://test.com/something, so 3rd value will have link thing
    url = "/" + url[3];
    val = Router.path(a);
    if(Session.get('r'))
        void(0);
    return url == val ? "active" : "";
});


Template.header.events({
  'click a': function () {
      Session.set('r', Math.random() + "");
  }  
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM