【问题标题】:meteor.js iron-router: prevent static template re-render and glitching?meteor.js iron-router:防止静态模板重新渲染和故障?
【发布时间】:2014-01-24 08:22:13
【问题描述】:

我有一个全局模板:

<template name="layout">
{{> header}}
{{> primaryNav}}
{{yield 'banner'}}
{{yield}}
{{> footer}}
{{> deleteConfirmModal }}
<span class="responsive-state"></span>
</template>

当我做路线时

@route 'blog',
    path: '/blog/'

一切都很好。我可以通过我的标题链接和导航链接来回单击而不会出现故障。但是如果我添加一个数据上下文:

@route 'blog',
    path: '/blog/'
    data: ->
        blogPosts: BlogPosts.find({}, {date: -1, time: -1}) 

当提供数据上下文时,每当我导航到和离开提供数据上下文的路径时,嵌套在布局模板中的所有模板似乎都会重新渲染,从而导致由于样式类被擦除而导致的故障,然后更换。如果我路由到不需要(且未提供)数据上下文的任何其他路径,则静态模板不会重新呈现。

在为特定路由提供数据上下文时,有没有办法防止某些静态模板重新呈现?

【问题讨论】:

    标签: javascript templates meteor iron-router


    【解决方案1】:

    在当前状态下使用 Meteor - 您可能应该依靠渲染来破坏大多数东西。

    至于 Iron-router - data 存储在 ReactiveVar 中,它确保对 data 的任何更改都会导致 layoutTemplate 重新渲染(这可能是一种过于简单的解释) .

    您也许可以:

    • 删除添加动画的样式
    • 尝试使用 preserve 保持元素完好无损。 (注意:它只保留元素引用,所有值/属性都会根据模板生成的元素重置)
    • 等待流星 1.0,或使用新模板渲染预览之一“修补”DOM,而不是在渲染时重新插入每个元素。

    【讨论】:

    • 是否有任何明确的方法可以在布局模板之外渲染一个或多个模板,并且仍然使用 Iron-router 来处理动态内容?
    • “调用”一个模板来渲染它——例如。 var html = Templates.blog({someData: true}) (docs.meteor.com/#template_call)。
    • 您也可以尝试使用 {{#constant}} 帮助器来防止重新渲染
    猜你喜欢
    • 2014-01-16
    • 2013-09-02
    • 2015-12-22
    • 1970-01-01
    • 2014-01-03
    • 2015-03-06
    • 2014-07-06
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多