2012-08-28 52 views
1

遇到麻烦,无法理解如何从findOne()返回并使用对象。将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}}似乎根本不起作用。

回答

3

同样的问题了几次了我,当我开始了流星...

当流星客户端连接到前集合已经完成正在同步的模板被渲染服务器。即您拨打电话findOne处的客户端集合为空。

要在操作中看到此操作,请在您的findOne调用后粘贴console.log(c)然后尝试重新加载页面。你会看到两个日志条目;一旦在初始页面加载,然后再次收集完成同步时。

要解决此问题,只需更新hello模板以处理收集可能未被同步的事实。

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

我测试了您的代码与上述变化,它的工作原理。

+0

这是一个伟大的小动作了解。你至少救了我一个小时的沮丧搜索! –