С помощью.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 6

1 ответ:

findBy принимает 2 аргумента, ключ свойства для проверки и значение для поиска (по умолчанию true, если не передается). По сути, вы ищете модель со свойством TYPE1 ,которое true

Вы, вероятно, хотите сделать это

findBy("id", "TYPE1")

Http://emberjs.com/api/classes/Ember.Array.html#method_findBy

Возвращает первый элемент со свойством, соответствующим переданному значению. Вы можете передать необязательный второй аргумент с целевым значением. Иначе это будет соответствовать любому свойству, которое оценивается как true.