如何正确地使流星模板具有反应性?

问题描述:

我的应用程序显示项目的集合,我想添加项目细分视图。如何正确地使流星模板具有反应性?

我只能够得到一半的解决方案的工作的;我找到相应的文件,并使用该文档呈现模板:

var item = Items.findOne('my_id'); 

$('#main').html(
    Meteor.render(function() { 
     return Templates.item(item) 
    })); 

这成功地使个别项目和相应的事件绑定。

这里的擦,模板没有反应!如果我使用关联的事件处理程序或从控制台更改其数据,则模板不会更新。但是,页面刷新将显示更新的数据。

我是流星noobie,所以它可能是非常简单的东西。任何帮助将不胜感激。

+0

这可能是因为你有一个超过右括号? '返回Templates.item(项))'应该是'返回Templates.item(项目)' –

+0

对不起,这只是一个错字。现在更新问题。 – pdoherty926

在我看来,你没有使用他们真正打算成为的模板。

流星的应用程序与主HTML标记,只能在你的应用程序中存在一旦开始..

<head> 
    <title>My New Fancy App</title> 
</head> 
<body> 
    {{>templateName}} 
</body> 

然后添加模板..

<template name="templateName"> 
    {{#each items}} 
    template or relevant html goes here.. 
    {{/each}} 
</template> 

现在你需要一个模板帮手为您的{{#each items}}帮助程序提供数据。

Template.templateName.helpers({ 
    items: function(){ return Items.find({}) } 
}); 

所有这些在第e客户端..

然后,你需要一个集合,集合应该在客户端和服务器上定义。

Items = new Meteor.Collection('items'); 

只要您的收藏中有记录,现在应该可以工作。

既然你希望只希望呈现一个单一的文件,你可以改变助手和模板稍稍..

第一助手变为:

Template.templateName.helpers({ 
    item: function(){ return Items.findOne() } 
}); 

然后模板可以参考的价值返回的文档通过文档,所以我们改变了我们的模板:

<template name="templateName"> 
    {{item.propertyName}} 
</template> 
+0

感谢您的回答。不过,我正在寻找渲染项目集合的单个成员。这与Meteor惯例不符? – pdoherty926

+1

你去了哪里,我已经更新了我的答案,以展示如何将集合中的单个文档渲染为模板。希望这可以帮助。 –