将 .findBy() 与 Ember 数据填充的数组控制器结合使用

2024-03-16

背景

我正在编写一些功能测试来测试我的路由器是否正确导航和加载我的模型。到目前为止,一切都很好——即使考虑到这个问题。

我已经创建了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()??

findBy需要 2 个参数,即要测试的属性键和要查找的值(如果未传入,则默认为 true)。本质上,您正在寻找具有属性的模型TYPE1 that's true

您可能想要这样做

findBy("id", "TYPE1")

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

返回属性与传递值匹配的第一个项目。您可以传递带有目标值的可选第二个参数。否则,这将匹配任何计算结果为 true 的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 .findBy() 与 Ember 数据填充的数组控制器结合使用 的相关文章

随机推荐