【问题标题】:Using .findBy() with Ember-data-populated array controller将 .findBy() 与 Ember-data-populated 数组控制器一起使用
【发布时间】: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()怎么用??

【问题讨论】:

标签: ember.js ember-data qunit


【解决方案1】:

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

您可能希望这样做

findBy("id", "TYPE1")

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

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

【讨论】:

  • 哦。我的。善良。我想这只是长时间查看同一段代码的结果。谢谢!
  • @Kingpin2k :如果传递的值是通过变量,它不能按预期工作。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 2016-04-03
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
相关资源
最近更新 更多