2012-11-14 52 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

相关问题