0

我做了一些实验,我发现 Meteor 会刷新<template> </template>块中的所有内容,只要其中一个值发生更改,例如:{{test}}...

<body>
    ...
  <div id="main-pane">
    {{> todos}}
  </div>
    ...
</body>


<template name="todos">

  {{test}}

  {{#if any_list_selected}}
    <div id="items-view">
        ...
        <ul id="item-list">
          {{#each todos}}
  ->{{testa}}
            {{> todo_item}}
          {{/each}}
        </ul>
        ...
    </div>
  {{/if}}
</template>

以及 .js 文件中的 setTimeout 来查找 和 的预期{{test}}变化{{testa}}

Session.setDefault('test', 'aaa');

Template.todos.test = function () {
  return new Date().getTime() + Session.get('test');
};
setTimeout(function () { Session.set('test', 'bbb'); }, 2000);

Template.todos.testa = function () {
  return new Date().getTime(); //the timestamps will be refresh at the same time that test will do...
};

无论{{testa}}模板放在哪里,它显示的时间戳都会在我们每次执行时更新Session.get('test')

我不知道这是否是一个有效的实验......所以我想知道这是否有效:所有模板都重新渲染?因为我认为反应式模板是别的东西......更漂亮......(?)

4

3 回答 3

1

我刚刚发现了这个:Ractive.js!!

“这种外科手术式DOM 操作比不断丢弃视图仅重新渲染它们更有效,并且它的缩放比手动更新元素要优雅得多。(!)在这个例子中,Ractive.js 构建了一个并行的 DOM 表示,它知道它依赖于 user 和 messages.unread 的值。当这些值发生变化时,它确切地知道真实 DOM 的哪些部分需要更新。”</p>

http://www.ractivejs.org/ http://www.theguardian.com/info/developer-blog/2013/jul/24/ractive-js-next-generation-dom-manipulation

太棒了!去做例子:http ://www.ractivejs.org/examples/和互动学习:http ://learn.ractivejs.org/#!/hello-world/1

于 2013-10-19T10:38:50.157 回答
1

如果要在同一模板中保留值,则必须使用单独的模板或隔离。

例子:

<template name="todos">
{{#each todos}}
  {{>todo_item}}
{{/each}}
</template>

<template name="todo_item">
  {{name}}{{task}}
</template>

或者使用隔离:

<template name="todos">
{{#each todos}}
  {{#isolate}}
    {{name}}{{task}}
  {{/isolate}}
{{/each}}
</template>
于 2013-10-18T20:01:30.650 回答
0

你应该看看那个网站:event mind.com 有一两个截屏视频可以让你了解流星是如何工作的。这比我认为的文字答案要好

于 2013-10-21T07:53:39.233 回答