0

我想做类似的事情:

App.Model.find({unique_attribute_a: 'foo'}).objectAt(0).get('attribute_b')`

基本上首先通过其唯一属性而不是其 ID 找到模型,然后获取该模型的另一个属性。(objectAt(0)使用是因为按属性查找返回一个 RecordArray。)

问题App.Model.find({unique_attribute_a: 'foo'}).objectAt(0)始终是未定义的。我不知道为什么。

请在jsbin中查看问题。

4

2 回答 2

1

看起来您想使用过滤器而不是查找(或在本例中为 findQuery)。这里的例子:http: //jsbin.com/iwiruw/438

App.Model.find({ unique_attribute_a: 'foo' }) 将查询转换为 ajax 查询字符串:

/model?unique_attribute_a=foo

Ember 数据希望您的服务器返回过滤后的响应。Ember Data 然后将此响应加载到 ImmutableArray 中,并且不对您尝试查找的内容做任何假设,它只知道服务器返回了与您的查询匹配的内容以及导致不可更改数组的组(您仍然可以修改记录,只是不是数组)。

另一方面,App.Model.filter 只是根据您的过滤器功能过滤本地商店。如果商店中没有模型,它确实有一个“神奇”的副作用,它将在幕后执行 App.Model.find,尽管我不确定这是否是有意的。

通常我会避免使用过滤器,因为它可能会对大型数据集和余烬数据产生一些性能问题。过滤器必须实现每条记录,如果您有数千条记录,这可能会很慢

于 2013-08-28T20:07:00.367 回答
0

irc 上的某个人给了我这个答案。然后我对其进行了修改以使其完全正常工作。基本上我应该使用过滤。

App.Office.filter( function(e){return e.get('unique_attribute_a') == 'foo'}).objectAt(0)

然后我可以得到如下属性:

App.Office.filter( function(e){return e.get('unique_attribute_a') == 'foo'}).objectAt(0).get('attribute_b')

请参阅jsbin中的代码。

有谁知道为什么filter有效但find没有?它们都返回 RecordArrays。

于 2013-08-28T19:21:23.897 回答