1

难以理解如何从 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}} 似乎根本不起作用。

4

2 回答 2

3

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

当 Meteor 客户端连接到服务器时,模板在集合完成同步之前被渲染。即客户端集合在您调用时为空findOne

console.log(c)要在通话后看到这一点,findOne请尝试重新加载页面。您将看到两个日志条目;一次在初始页面加载时,然后在集合完成同步时再次。

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

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

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

于 2012-08-30T03:07:02.630 回答
1

正确的方法是使用#with 标签。

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

有关#with 标签的更多信息,请参阅下面的文档

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

于 2014-05-28T17:52:51.830 回答