2013-09-10 3 views
1

У меня есть объект json в коллекции, который мне нужно показать на странице. Вот что я сделал: я сначала вызвать helpers template то, что я принести объект JSON из коллекции: Я использую coffeescirpt и нефритовые-рули, вот идет мой код в CoffeeScript:Показать json объект динамически

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]. Чтобы увидеть Question1, question2 я должен сделать следующее:

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

Как я могу динамически показать все вопросы, не делая {{QuestionData.question1}} ...

Спасибо заранее !!!

ответ

0

Вроде как Джим Mack Добавлена, сохранить коллекцию в массиве
в первую очередь вставить свой вопрос в массиве, делая это в вашем CoffeeScript:

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

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

тогда, так как вы используете нефрит Рулям вас нужно зарегистрировать Помощник с в файле нефрита сделать эти

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

     {{/each}} 

arrayify и myObject являются рулями помощников. Затем в вашем coffeescript

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 

Надейтесь, что это сработает.

+0

wow это работает ..... :) :) –

2

Вы можете динамически формировать имена полей в цикле.

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

Это, как говорится, много здесь, что кажется мне недоразумением. Я бы отступил и сказал, что вы должны изучить вопрос о сохранении одного вопроса в одном документе. Это дает вам самые простые данные для метеорной игры. Или, храня несколько вопросов в массиве:

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, которыми управляет маршрутизатор?

2

вместо того, чтобы просто возвращает объект JSON с Questions.find() выборки() можно добавить еще один шаг, чтобы поместить данные в массив, как:.

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

return test; 

(извините за не писать в кофе скрипте , я не в курсе языковой абстракции)

+0

то, как мы называем его из tempalte @RonH –

+0

в консоли я все еще получаю объект {_id: "w9mGrv7LYNJpQyCgL", идентификатор пользователя: "ntBgqed5MWDQWY4xt", QuestionData: Object, imgurl: «https: //www.filepicker .io/api/file/e4jZ. Я все еще получаю «объект» при использовании QuestionData –

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; 
}; 

Иn в шаблоне:

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

Что-то в этом роде. Но я согласен с Джимом Максом и что вы, вероятно, должны хранить это в массиве.

+0

. Я отправился с Джимом Макком и сам это понял. Спасибо всем, кто ответил на вопрос. Вы, ребята, действительно заслуживаете лучшего. :):) –

Смежные вопросы