1

我在集合中有一个 json 对象,我需要在页面上显示它。这是我所做的:我首先调用helpers templatethen 从集合中获取 json 对象:我使用的是 coffeescirpt 和 jam-handlebars,这是我在 coffeescript 中的代码:

Template.test.helpers
  test: ->
    test = Question.find().fetch(); 
    test

在控制台中,当我执行Question.find().fetch()以下操作时:

QuestionData: Object
question1: "How many kids do I have ?"
question2: "when will i die ?"
question3: "how many wife do i have ?"
question4: "test"
__proto__: Object
_id: "w9mGrv7LYNJpQyCgL"
userid: "ntBgqed5MWDQWY4xt"
specialNote: "Rohan ale"

现在在翡翠中,当我通过以下方式调用模板时:

template(name="hello")
  .test {{QuestionData}}

我只能看到[object] [object]. 要查看问题 1、问题 2,我必须执行以下操作:

template(name="hello")
  .test {{QuestionData.question1}}, {{QuestionData.question2}}

如何在不做的情况下动态显示所有问题{{QuestionData.question1}}...

先感谢您 !!!

4

4 回答 4

2

要回答有关如何操作的问题,您可以执行以下操作(在 JS 中,抱歉,不是 coffeeScripter):

Template.Questionnaire.questions = function () {
    var questions = [];
    _.each(Object.keys(this), function (field) {
        if(/^question.+/.test(field)) {
            questions.push({ label: field, question: this[field]});
        }            
    });
    return questions;
};

然后在模板中:

<template name="Questionnaire">
{{#each questions}}
    <label>{{label}}</label>
    <span>{{question}}</span>
{{/each}}
</template>

类似的东西。但我同意 Jim Mack 的观点,您可能应该将它存储在一个数组中。

于 2013-09-24T15:24:55.003 回答
2

您可以在循环中动态组合字段名称。

b = { q1: 'a1', q2: 'a2', q3: 'a3' };
for (x=1;x<=3;x++) { console.log( b[ 'q' + x ] ) }

话虽如此,这里有很多对我来说似乎是一个误解。我会退后一步说您应该考虑为每个 mongo 文档存储一个问题。这为您提供了最简单的流星数据。或者,将多个问题存储在一个数组中:

test = {
  questions : [ 
    "How many kids do I have ?"
    "when will i die ?"
    "how many wife do i have ?"
    "test" ] ,
userid: "ntBgqed5MWDQWY4xt",
specialNote: "Rohan ale"
}

当您考虑如何存储答案、对问题进行排序等时,问题就来了。可能是一个称为问题的集合,一个字段可能称为 sortOrder,一个字段称为标签等。

您是如何以这种方式获取调用模板的,而不是将它们作为路由器为您管理的 html 文件?

于 2013-09-10T10:38:58.483 回答
2

而不是仅仅用 Questions.find().fetch() 返回你的 json 对象,你可以添加另一个步骤来将你的数据放入一个数组中,比如:

test = function() { 
  var temp = [];
  for (item in Questions.find().fetch()) {
    temp.push(item);
  };
  return temp;
};

return test;

(抱歉没有用咖啡脚本写,我不知道语言抽象)

于 2013-09-10T11:31:32.220 回答
0

就像 JIm Mack Posted 一样,首先将您的集合保存在
数组中,通过在您的咖啡脚本中执行以下操作将您的问题插入数组中:

x = document.getElementById('question-form')
    length = x.length

    i = 0
    question = []
    while i< length
      aaa = x.elements[i]
      question.push
        questions: aaa
      i++

那么由于您使用的是 Jade-handlebars,因此您需要在您的翡翠文件中注册帮助程序,执行这些操作

 {{#each arrayify myObject}}
                  {{#each this.name}}
                    p {{questions}}
                  {{/each}}

        {{/each}}

和是车把助手arrayifymyObject然后在你的咖啡脚本中

Handlebars.registerHelper "arrayify", (obj) ->
  result = []
  for temp in obj
    userQuestion = temp.question
    result.push
      name: userQuestion
  return result

Template.templatename.myObject = ->
  temp = []
  for item in Question.find().fetch()
    temp.push item
  return temp

希望这些能奏效。

于 2013-09-25T08:07:39.160 回答