在尝试通过首先通过另一个属性查找模型来获取模型的属性时,查找模型返回undefined?

时间:2013-08-28 18:47:45

标签: ember.js

我想做点什么:

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

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

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

请在the jsbin中查看问题。

2 个答案:

答案 0 :(得分:1)

看起来你想要使用过滤器而不是find(或者在这种情况下是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.filtler只根据您的过滤功能过滤本地商店。它确实有一个“神奇”的副作用,如果商店里没有模特,它会在幕后做App.Model.find,虽然我不确定这是不是意图。

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

答案 1 :(得分:0)

irc上有人给了我this个回答。然后我修改它以使其完全工作。基本上我应该使用过滤。

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')

请参阅代码in jsbin

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