模板不显示对象

问题描述:

我是Meteor的新手,对新手问题表示歉意。注意我正在使用CoffeeScript。模板不显示对象

我创建上面如下服务器和客户端的“如果”一个新的集合:

Trivia = new Meteor.Collection("trivia") 

在启动时,我插入一些文档到集合下,如果Meteor.isServer。这里的一个例子:

Meteor.startup() -> 
     Trivia.remove({}) 
     Trivia.insert({question: "Who Played Ethan Hunt in Mission Impossible?", choices: ["Tom Cruise", "Matt Damon", "Liam Neeson", "Edward Norton"], answer: "Tom Cruise", used: false}) 

在HTML页面上,我有一个带{{ask}}的“trivia”模板。

<body> 
    {{> trivia}} 
</body> 

<template name="trivia"> 
    <p class="label label-info">Movie Trivia:</p> 
    <h3>{{ask}}</h3> 
</template> 

这里距离.isClient

if Meteor.isClient 
    Template.trivia.ask =() -> 
     Trivia.findOne({used: false}) 

我的代码,因为它是,我回来的翻译:在我的HTML标记H3内。

我想刚刚回来的问题文本,但我得到了一个空白页面,如果我使用下面的代码:

Template.trivia.ask =() -> 
    Trivia.findOne({used: false}).question 

如果我运行Trivia.findOne({使用:假})。问题在控制台内部,我得到了我正在寻找的东西,即:“谁在不可能完成的任务中扮演Ethan Hunt?”

答案是汤姆克鲁斯!开玩笑

该查询返回的对象包含您的文档:

{ 
    question: "Who Played Ethan Hunt in Mission Impossible?", 
    choices: ["Tom Cruise", "Matt Damon", "Liam Neeson", "Edward Norton"], 
    answer: "Tom Cruise", 
    used: false 
} 

所以上面的是什么,是给车把,但你想要的问题,所以你应该使用:

<h3>{{ask.question}}</h3> 

关于当您使用Trivia.findOne({used: false}).question的空白页面。这是因为当流星最初在浏览器上加载时,本地集合是空的,直到它从服务器获取它们。因此,在某个时刻,在很短的时间内,查询将不会返回任何内容,因此您只需要处理findOne({used:false})没有结果的情况。运行到异常时页面变空白。

+0

超级有用的回应Akshat。谢谢。精彩的工作! – ppedrazzi 2013-02-24 02:40:57