【发布时间】:2013-12-27 17:01:14
【问题描述】:
背景
我正在编写一些功能测试来测试我的路由器是否正确导航和加载我的模型。到目前为止,一切都很好——即使考虑到这个问题。
我创建了a fiddle,供您欣赏。它不起作用——尽管分叉了@wagenet,但我对 jsfiddle 和 ember 的运气一直不太好。但它有更多的源代码可以帮助我全面了解我正在做的事情。
我最大的抱怨
所以我最大的抱怨是以下代码无法从控制器中检索具有已知 id 的元素:
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;
}
});
这显然不是那么干净。
所以,问题
-
.findBy()坏了吗? - 我在
.findBy()做错了吗? -
.findBy()怎么用??
【问题讨论】:
-
灰烬阵列includes
标签: ember.js ember-data qunit