#ember.js #handlebars.js
#ember.js #handlebars.js
Вопрос:
Я пытаюсь получить доступ к объекту внутри массива внутри handlebars, на Ember.js . Я пробовал следующие комбинации:
1 {{render "input-validation-message" validity.options.[_view.contentIndex]}}
2 {{render "input-validation-message" validity.options._view.contentIndex}}
3 {{render "input-validation-message" validity.options[_view.contentIndex]}}
Массив есть validity.options
, а индекс есть _view.contentIndex
, и это единственный известный мне способ получить доступ к индексу внутри {{#each}}
циклов на Ember.js .
Ни один из трех методов не передает объект. У кого-нибудь есть решение?
Редактировать:
После некоторой игры я обнаружил, что _view.contentIndex
доступ к нему не осуществляется внутри блока {{если}} или {{если}} . Мой код выглядит примерно так:
{{#each modelArray}}
{{#unless _view.contentIndex}}
[code here that needs to access _view.contentIndex]
{{else}}
[more code here that needs to access _view.contentIndex]
{{/unless}}
{{/each}}
Есть ли способ решить эту проблему?
ИСПРАВЛЕНО!
Я немного изменил правильный ответ ниже:
{{#each item in modelArray itemController='foo'}}
{{render "input-validation-message" item.validityOption}}
{{/each}}
App.FooController = Ember.ObjectController.extend({
validityOption: function(){
var model = this.get('model'),
eachController = this.get('target'),
parentController = eachController.get('target'),
idx = eachController.get('content').indexOf(model);
return parentController.get('validity.options').objectAt(idx);
}.property('model')
});
Если массив не является Ember.Массив, []
не используйте objectAt()
.
Комментарии:
1. вы перебираете один массив и пытаетесь получить параметры из другого массива?
2. @kingpin2k Да, каждый массив представляет собой DS.Model, тогда как массив validity.options представляет собой простой массив. Я нашел более конкретную причину ошибки, пожалуйста, проверьте правку.
Ответ №1:
Вы захотите использовать ItemController и подключить ассоциацию в контроллере
{{#each item in modelArray itemController='foo'}}
{{render "input-validation-message" item.validityOption}}
{{/each}}
App.FooController = Ember.ObjectController.extend({
validityOption: function(){
var model = this.get('model'),
parentController = this.parentController,
idx = parentController.indexOf(model);
return parentController.get('validity.options').objectAt(idx);
}.property('model')
});
Комментарии:
1. Отлично! Не знал о свойстве ItemController. Мне пришлось его немного изменить, пожалуйста, проверьте редактирование.