2013-04-16 62 views
3

我在我的應用程序中有一個頁面,其中包含用戶正在處理的項目列表。Meteor.js - 暫時防止模板重新渲染(禁用反應性)

當他們想要添加一個新項目時,我會顯示一個模態窗體來獲取項目的名稱。

如果他們點擊'OK'我創建項目並使用Meteor.Router重定向到/ project/[new project id]。

但是,就在重定向之前,我會自動將新項目名稱看到用戶的項目列表。

我想避免這種不必要的重新渲染,這會導致更新內容的短暫閃現。

有沒有辦法阻止我的項目列表重新呈現模板?

回答

4

你可以把你的html包含到{{#constant}}塊中。 Docs on constant

{{#constant}} 
    {{#each ...}} 
    .... 
    {{/each}} 
{{/constant}} 

另一種選擇是在模板助手如禁用的反應,如果你有

Template.home.mydata = function() { return MyCollection.find() } 

改變這種使用reactive:false作爲一個選項

Template.home.mydata = function() { return MyCollection.find({}, {reactive:false}) } 

這顯示初始更改的方式,但任何更新都不是'使用,所以不會有重新渲染。

+0

這很接近,但我希望模板在其餘時間處於被動狀態(例如,如果另一個用戶更改了項目名稱,我希望看到該更改)。我有一個臨時的解決方法 - 在嘗試創建新項目之前重定向到顯示空白模板的URL。 – user2266659

+0

您可以使用反應性false/true來在需要時啓用/禁用它。但該模板將被重新渲染。通常不會有閃光燈或其他類似的東西直接改變DOM。你使用提交按鈕btw?您可能不會使用preventDefault – Akshat

+0

{{#constant}}對於實時搜索非常適用,如果您使用會話變量,銷燬然後重新提交模板 – Marz

0

我發現在對方法的調用取消了反應鏈之後,在事件處理程序中使用cancel。

Template.questionTeaser.events({ 
    "click .vote_add": function(event, template){ 
    Meteor.call('vote_add', this._id, this.session) 

    // This cancels the chain of reactivity. 
    return false 
    }, 
}) 

我用它下面的用例:

用戶看到的通過票數排序的問題的列表 用戶可以給予好評 給予好評後,名單被重新描繪/整理但隨着的rightside倒計時該頁面使用戶知道他不能點擊一下。

+0

這對我並不適用 – nearpoint