2012-11-14 47 views
5

流星在文檔更改時重新呈現視圖。當某些字段發生變化時,流星不會重排

Template.story.data = function() { 
    var storyID = Session.get('storyID'); 
    var story = Stories.findOne({ 
    _id: storyID 
    }) 

    if (!story) 
    return; 

    return story; 
}; 

下面是故事模板的模板助手,從故事文檔中獲取故事。

story.title等字段發生變化時,我希望模板重新渲染。但是當story.viewingusers等字段發生變化時,我不想重新渲染模板。無論如何,要做到這一點?

觸發問題的具體問題通過將發佈功能設置爲不發佈這些字段來解決。但是,該解決方案不適用於每個用例,並且需要一個通用的解決方案。

+0

試模板保存? – crapthings

+0

它仍然是正確的數據權利?是否有一個原因,你不希望模板多次渲染(超越優化?) –

+0

@TomColeman數據是正確的,但我有一個界面元素,顯示爲一個彈出窗口。每當元素被重新渲染時,彈出窗口就會被銷燬。這真的很煩人。 – Harry

回答

3

你在找什麼是#constant模板助手。

在你的情況下,我會做的是將popover標記包裝在一個常量塊中,然後在story.rendered函數中手動更新該塊中的內容。

因此,像這樣:

story.html:

<template name="story"> 
    ... 
    {{#constant}} 
     <!-- Popover markup here --> 
    {{/constant}} 
    ... 
</template> 

client.js:

Template.story.rendered = function(){ 
    //Update logic here 
} 
+0

這是一個選項,但它破壞了流星式的邏輯並增加了很多複雜性,所以我希望能更直接地解決這個問題。 – Harry

+0

嗯,我不確定流星式的邏輯,但是我從流星的'派對'例子中學到了這種技巧。你應該仔細看看這個例子,它會圍繞邏輯封裝一個自動運行,以便更新邏輯在'流星風格'中也是無效的。 –

+0

好吧,這迫使你使用'Meteor.render'或用dom操作構建你的HTML。這兩者都不是很好。我檢查了各方的例子,這是他們做的。這工作。但它會使渲染速度變慢,將模板代碼放入JavaScript而不是模板中,並迫使您將模板分解爲更多部分。所有這三件事情都增加了複雜性並使事情難以維護。但我的意思是說,這是一個很好的和有益的答案,謝謝。 – Harry

相關問題