背景
我正在编写一些功能测试来测试我的路由器是否正确导航和加载我的模型。到目前为止,一切都很好——即使考虑到这个问题。
我已经创建了a fiddle http://jsfiddle.net/magLM/2/,供您欣赏。它不起作用——尽管有分叉,但我在 jsfiddle 和 ember 方面从来没有什么运气@wagenet http://jsfiddle.net/wagenet/kcjzw/。但它有更多的源代码来帮助我全面了解我正在发生的事情。
我最大的抱怨
所以我最大的抱怨是以下代码无法从控制器检索具有已知 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;
}
});
这显然不是那么干净。
所以,问题
- Is
.findBy()
broken?
- 我在做吗
.findBy()
wrong?
- 你如何使用
.findBy()
??