了解如何从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}}似乎根本不起作用。
答案 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