1

我的应用程序显示了一组项目,我想添加一个项目向下钻取视图。

我只能使解决方案的一半起作用;我找到合适的文档并使用该文档来呈现模板:

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

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

这将成功呈现单个项目并绑定适当的事件。

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

我是 Meteor noobie,所以这可能很简单。任何帮助将不胜感激。

4

1 回答 1

4

在我看来,您并没有按照他们真正想要的方式使用模板。

流星应用程序以主 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({}) }
});

所有这些都在客户端定义..

然后您将需要一个集合,并且该集合应在客户端和服务器上都定义。

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

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

由于您只希望呈现单个文档,您可以稍微更改帮助程序和模板。

首先助手变成:

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

那么模板就可以通过document引用返回的文档的值了,所以我们把我们的模板改成:

<template name="templateName">
  {{item.propertyName}}
</template>
于 2013-06-20T22:08:22.310 回答