将findOne对象返回给模板

时间:2012-08-28 14:08:22

标签: meteor

了解如何从findOne()返回和使用对象时遇到麻烦。

我的代码是:

HTML:

<head>
  <title>count</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  {{showcount}}
</template>

JS:

var Database = new Meteor.Collection("counters");

if(Meteor.is_client) {
  Template.hello.showcount = function () {
    var c = Database.findOne();
    return c;
  };

}

if (Meteor.is_server) {
  Meteor.startup(function () {
    if(Database.find().count() === 0)
    {
        Database.insert({name: "counter", value: 0});
    }
  });
}

现在我想知道是否有任何方法可以从我的对象访问数据。 从{{showcount}}更改为{{showcount.name}}似乎根本不起作用。

2 个答案:

答案 0 :(得分:3)

当我开始使用Meteor时,同样的问题让我有几次......

当Meteor客户端连接到服务器时,模板将在集合完成同步之前呈现。即,您呼叫findOne时,客户端集合为空。

要查看此操作,请在console.log(c)电话后粘贴findOne,然后尝试重新加载页面。您将看到两个日志条目;一旦进入初始页面加载,然后在集合完成同步后再次出现。

要解决此问题,您需要做的就是更新hello模板以处理集合可能尚未同步的事实。

{{#if showcount}}
    {{showcount.name}}
{{/if}}

我使用上述更改测试了您的代码并且它可以正常工作。

答案 1 :(得分:1)

执行此操作的正确方法是使用#with标记。

<template name="hello">
{{#with showcount}}
    {{name}}
{{/with}}
</template>

有关#with标签

的更多信息,请参阅下面的文档

https://github.com/meteor/meteor/blob/devel/packages/spacebars/README.md