Nano Hash - криптовалюты, майнинг, программирование

Ember 1.0, Ember Data beta 3: получение связанных данных модели с помощью DS.FixturesAdapter

JSBin здесь: http://jsbin.com/IYiqifO/16/edit?html,js,output

У меня есть три связанные модели, настроенные с помощью фикстур из DS.FixturesAdapter, и я пытаюсь выяснить, как получить доступ к атрибутам связанной модели из родительской модели в компоненте. Мой шаблон выглядит так:

{{#each data}}
  <li>
    <h3>{{name}}</h3>
    {{#each responses}}
      {{text}}<br />
    {{/each}}
  </li>
{{/each}}

И у меня также есть код в компоненте, например:

data = @get('data').map (respondent) ->
  {
    name: respondent.get('name')
    responses: respondent.get('responses').map (r) -> r.get('text')
  }

но data[n].responses всегда является пустым массивом. Что мне нужно сделать, чтобы а) заполнить шаблон руля данными ответа; и б) заставить мой объект data иметь правильно заполненные массивы responses?


Ответы:


1

Вам нужно передать идентификаторы ответов в фикстуре Respondent:

App.Respondent.FIXTURES = [
    id: 1
    name: 'Ada Lovelace'
    responses: [1,2]
  ,
    id: 2
    name: 'Grace Hopper'
    responses: [3,4]
]

После этого вы получите сообщение об ошибке:

Утверждение не выполнено: вы искали связь «ответы» на «», но некоторые из связанных записей не были загружены. Либо убедитесь, что все они загружаются вместе с родительской записью, либо укажите, что отношение является асинхронным (DS.hasMany({ async: true }))

Как и в сообщении, вам нужно использовать async: true в вашем свойстве responses:

App.Respondent = DS.Model.extend
  name: DS.attr('string')
  responses: DS.hasMany('response', async: true )

В вашем шаблоне вы увидите данные, но в didInsertElement при его вызове ассоциация responses не загружается. Это происходит потому, что шаблон поддерживает привязку, а didInsertElement — нет. Поэтому, когда responses загружается, шаблон обновляется, но didInsertElement не вызывается. Поскольку ассоциация responses возвращает обещание, вы можете получить все ответы в виде массива и использовать Ember.RSVP.all, чтобы узнать, когда все ответы будут загружены:

 App.ShowRespondentsComponent = Ember.Component.extend
  didInsertElement: ->
    allResponses = []
    @get('data').forEach (respondent) =>
      allResponses.push respondent.get('responses')     
    Ember.RSVP.all(allResponses).then =>
      @respondentLoaded()
  respondentLoaded: ->        
    thisIsWhatIWant = @get('data').map (respondent) ->
      {
        name: respondent.get('name')
        responses: respondent.get('responses').map (r) -> r.get('text')
      }
    console.log thisIsWhatIWant

Это jsbin с этим рабочим http://jsbin.com/IYiqifO/19/edit.

15.10.2013
  • А как насчет «Либо убедитесь, что они все загружены»? Это возможно? 04.02.2014
  • Если мне действительно нужно это сделать, это отличный аргумент в пользу того, чтобы выбросить Ember Data и начать заново. 07.04.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..