С помощью.findBy () с контроллером массива Ember-data-filled
Фон
Я пишу некоторые функциональные тесты, чтобы проверить, что мой маршрутизатор правильно перемещается и загружает мои модели. Пока все идет хорошо-даже в свете этой проблемы.
Я создал скрипку, для вашего удовольствия. Это не работает-мне никогда не везло с jsfiddle и ember, несмотря на раздвоение @wagenet . Но у него есть больше исходного кода, чтобы помочь получить общую картину того, что у меня происходит.
Моя Самая Большая Обида
Итак, мой самая большая проблема заключается в том, что следующий код не работает для извлечения элемента с известным идентификатором из контроллера:
var controller = App.__container__.lookup("controller:postsNew");
var type1Option = controller.get("controllers.types").findBy("TYPE1");
Я сделал нечто подобное в крюке setupController, и это сработало. Но это было в контексте моего заявления, поэтому оно выглядело примерно так:
setupController: function(controller, model) {
this._super(controller, model);
this.controllerFor("types").findBy("TYPE1");
}
Но даже это больше не работает! Я также работаю вне моего приложения, сейчас-в тесте qunit. Поэтому я должен использовать App.__container__.lookup()
, согласно всему, что я прочитал.
Корень?
Что у меня есть найдено, что controller.length
не определено-что вызывает сбой .findBy()
. И предметы существуют в array...at по крайней мере, я могу видеть их, делая controller.toArray()
.
Временное Решение
Вместо этого я должен сделать следующее:
var controller = App.__container__.lookup("controller:postsNew");
var type1Option = null;
$.each(controller.get("controllers.types").toArray(), function(index, elm) {
if (elm.get("id") === "TYPE1") {
type1Option = elm;
return true;
}
});
Это, очевидно, не так чисто.
Итак, Вопросы
- сломан ли
.findBy()
? - я делаю
.findBy()
неправильно? - Как вы используете
.findBy()
??
1 ответ:
findBy
принимает 2 аргумента, ключ свойства для проверки и значение для поиска (по умолчанию true, если не передается). По сути, вы ищете модель со свойствомTYPE1
,котороеtrue
Вы, вероятно, хотите сделать это
findBy("id", "TYPE1")
Http://emberjs.com/api/classes/Ember.Array.html#method_findBy
Возвращает первый элемент со свойством, соответствующим переданному значению. Вы можете передать необязательный второй аргумент с целевым значением. Иначе это будет соответствовать любому свойству, которое оценивается как true.