以下是我正在嘗試的操作。如果當前Photo對象(我們通過photoId變量獲得)具有URL屬性,則將其顯示爲img
。如果沒有,表現出微調:流星 - 防止模板每次重新渲染{{#if}}
{{#if photoUrl photoId}}
<img src="{{photoUrl photoId}}"/>
{{else}}
{{> spinner}}
{{/if}}
輔助方法:
photoUrl: function (photoId) {
var photo = Photos.findOne(photoId);
if (photo && photo.croppedUrl)
return photo.croppedUrl;
}
這工作正常的舊文章。但是剛發佈的帖子,其照片仍在上傳,在頭幾秒鐘內多次提交該模板。如果內容是靜態的,那麼這將是可以的,但是微調器正在旋轉,並且每次重新移動都會重新開始。
我的直覺是,模板重新描繪,因爲我的上傳庫(collectionFS)正在改變新Photo
對象,每次出現這種情況時,流星重新評估photoUrl
,因爲它有一個對象作爲依賴(右?) 。例如,在Meteor.nonreactive
中包裝輔助主體,可以解決當前的問題(儘管它創建了其他問題)。
我會假設Meteor只會在實際更改爲{{#if}}
條件後重新渲染模板,但似乎每次條件重新渲染時都會重新渲染,無論結果如何。
有沒有辦法避免不必要的(即相同的值{{#if}}
條件)重新渲染?或者我必須找到一種方法來獲取照片網址,而不直接引用Photo
對象?
我使用'isolate'試圖(和'constant')阻止所有以各種方式在模板上進行,而且它看起來好像反應性/迴歸來自「if」塊本身。 – Zach
嘗試放入'console.log'來查看photoUrl助手中的更改。隔離的想法不是停止重新渲染,而是將其與模板的其餘部分隔離。要阻止它重新渲染,你需要看看是什麼導致它改變,如果它正在改變(它應該作爲它的重新渲染)。 – Akshat