2013-10-24 5 views
1

я модель определяется следующим образом:Как отобразить hasMany записи в шаблоне Ember.js?

App.Question = DS.Model.extend({ 
    title: DS.attr('string'), 
    answers: DS.hasMany('App.Answer') 
}); 

App.Answer = DS.Model.extend({ 
    title: DS.attr('string'), 
    wynikid: DS.attr('number') 
}); 

И получить данные из RESTAdapter, которая возвращает данные, как это:

{ 
    "questions": [ 
     { 
      "id": 77, 
      "title": "O której wstajesz?", 
      "answers": [ 
       { 
        "id": 159, 
        "title": "O godzinie 6", 
        "wynikid": 57 
       }, 
       { 
        "id": 160, 
        "title": "O godzinie 7", 
        "wynikid": 56 
       }, 
       { 
        "id": 161, 
        "title": "O godzinie 12", 
        "wynikid": 55 
       } 
      ] 
     }, 
     { 
      "id": 76, 
      "title": "Kot czy kominiarz?", 
      "answers": [ 
       { 
        "id": 156, 
        "title": "Kocur", 
        "wynikid": 57 
       }, 
       { 
        "id": 157, 
        "title": "Kominiarz", 
        "wynikid": 56 
       }, 
       { 
        "id": 158, 
        "title": "Ani to ani to", 
        "wynikid": 55 
       } 
      ] 
     }, 
     { 
      "id": 75, 
      "title": "Wybierz ulubione imię", 
      "answers": [ 
       { 
        "id": 153, 
        "title": "Bożydar", 
        "wynikid": 57 
       }, 
       { 
        "id": 154, 
        "title": "Aleksander", 
        "wynikid": 56 
       }, 
       { 
        "id": 155, 
        "title": "Andrzej", 
        "wynikid": 55 
       } 
      ] 
     }, 
     { 
      "id": 74, 
      "title": "Wybierz liczbę", 
      "answers": [ 
       { 
        "id": 152, 
        "title": "Liczba 13", 
        "wynikid": 56 
       }, 
       { 
        "id": 151, 
        "title": "Liczba 7", 
        "wynikid": 55 
       }, 
       { 
        "id": 150, 
        "title": "Liczba 1", 
        "wynikid": 57 
       } 
      ] 
     }, 
     { 
      "id": 78, 
      "title": "Ulubiona pora roku", 
      "answers": [ 
       { 
        "id": 162, 
        "title": "To lato", 
        "wynikid": 57 
       }, 
       { 
        "id": 163, 
        "title": "Jesień/Wiosna", 
        "wynikid": 56 
       }, 
       { 
        "id": 164, 
        "title": "To zima", 
        "wynikid": 55 
       } 
      ] 
     } 
    ] 
} 

Теперь то, что я хотел бы acomplish, чтобы показать список, как это:

O której wstajesz? 
O godzinie 6 
O godzinie 7 
... 
Kot czy kominiarz? 
... 

Я пытался использовать это в шаблоне ember.js:

{{#each controller}} 

    {{title}}<br> 

    {{#each answer in answers}} 

    \t{{title}}<br> 

    {{/each}} 

    {{/each}} 

И отображаются вопросы, но ответы arent. У меня нет никакой ошибки в консоли, и JSONLint также не видит никаких проблем с JSON.

Как заставить его работать?

Я использую:

handlebars1.0.0.0.js уголек-1.0.0.0.min.js уголек данные: v0.13-238-gbf84978

ответ

0

Новейшая версия Эмбер/уголек -data не поддерживает встроенные записи. Это задокументировано here, но я нашел, что обходной путь был очень неуклюжим и не мог заставить его работать сам.

Возможно, наилучшим решением является снятие вашей записи ответов, чтобы оно появлялось рядом с записью вопросов в вашем корне JSON. Это, конечно, предполагает, что вы контролируете свой формат JSON, поэтому этот ответ не применяется, если это не так. Если вы используете сериализаторы активной модели, это делается с помощью опций embed: :id и include: true. Вы бы question_serializer.rb с чем-то вроде

class QuestionSerializer < ActiveModel::Serializer 
    attributes :id, :title 
    has_many :answers, embed: :id, include: true 
end 

А также answer_serializer.rb с чем-то вроде

class AnswerSerializer < ActiveModel::Serializer 
    attributes :id, :title, :wynikid 
end 

Я считаю, что должны работать. У меня была проблема с этим только вчера, и я поставил вопрос о стеке на нем here, но сегодня я выяснил свою проблему и ответил на мой собственный вопрос. Я смог получить распечатку своего JSON в основном так же, как вы пытаетесь сделать с вашим кодом руля!

Редактировать: грамматика.

0

последний ember не поддерживает встроенные записи из коробки. но можно разобрать встроенный вручную

http://emberjs.jsbin.com/AkovAPu/4 - пример (будет работать, если локальный: 8888/вопросы вернуть JSON - { "вопросы": [...)

http://emberjs.jsbin.com/AkovAPu/4/edit - источник (смотреть на extractArray)

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