我在我的應用程序中有一個頁面,其中包含用戶正在處理的項目列表。Meteor.js - 暫時防止模板重新渲染(禁用反應性)
當他們想要添加一個新項目時,我會顯示一個模態窗體來獲取項目的名稱。
如果他們點擊'OK'我創建項目並使用Meteor.Router重定向到/ project/[new project id]。
但是,就在重定向之前,我會自動將新項目名稱看到用戶的項目列表。
我想避免這種不必要的重新渲染,這會導致更新內容的短暫閃現。
有沒有辦法阻止我的項目列表重新呈現模板?
我在我的應用程序中有一個頁面,其中包含用戶正在處理的項目列表。Meteor.js - 暫時防止模板重新渲染(禁用反應性)
當他們想要添加一個新項目時,我會顯示一個模態窗體來獲取項目的名稱。
如果他們點擊'OK'我創建項目並使用Meteor.Router重定向到/ project/[new project id]。
但是,就在重定向之前,我會自動將新項目名稱看到用戶的項目列表。
我想避免這種不必要的重新渲染,這會導致更新內容的短暫閃現。
有沒有辦法阻止我的項目列表重新呈現模板?
你可以把你的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}) }
這顯示初始更改的方式,但任何更新都不是'使用,所以不會有重新渲染。
我發現在對方法的調用取消了反應鏈之後,在事件處理程序中使用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倒計時該頁面使用戶知道他不能點擊一下。
這對我並不適用 – nearpoint
這很接近,但我希望模板在其餘時間處於被動狀態(例如,如果另一個用戶更改了項目名稱,我希望看到該更改)。我有一個臨時的解決方法 - 在嘗試創建新項目之前重定向到顯示空白模板的URL。 – user2266659
您可以使用反應性false/true來在需要時啓用/禁用它。但該模板將被重新渲染。通常不會有閃光燈或其他類似的東西直接改變DOM。你使用提交按鈕btw?您可能不會使用preventDefault – Akshat
{{#constant}}對於實時搜索非常適用,如果您使用會話變量,銷燬然後重新提交模板 – Marz