С помощью.findBy () c контроллером массива, заполненного данными Ember
фон
я пишу некоторые функциональные тесты, чтобы проверить, что мой маршрутизатор правильно перемещается и загружает мои модели. Пока все идет хорошо-даже в свете этого вопроса.
я создал скрипка, для вашего удовольствия. Это не работает-мне никогда не везло с jsfiddle и ember, несмотря на раздвоение @wagenet. Но у него больше исходного кода, чтобы помочь получить общую картину того, что у меня происходит.
мой Самый Большой Gripe
поэтому моя самая большая проблема заключается в том, что следующий код не работает для извлечения элемента с известным идентификатором из контроллера:
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()
на провал. И элементы существуют в массиве...по крайней мере, я могу их видеть, делая 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;
}
});
это, очевидно, не так чист.
Итак, Вопросы
- Is
.findBy()
сломана? - я делаю
.findBy()
не так? - как вы используете
.findBy()
??
1 ответов
findBy
принимает 2 аргумента, ключ свойства для проверки и значение для поиска (по умолчанию true, если не передано). По сути, вы ищете модель со свойством TYPE1
это true
вы, вероятно, хотите сделать это
findBy("id", "TYPE1")
http://emberjs.com/api/classes/Ember.Array.html#method_findBy
возвращает первый элемент со свойством, соответствующим переданному значению. Вы можете передать необязательную секунду аргумент с целевым значением. В противном случае это будет соответствовать любое имущество, которое оценивается как true.