【发布时间】:2013-08-08 10:25:11
【问题描述】:
我在 FixtureAdapter 中实现了 queryFixtures,以便能够进行“更复杂”的查询。我是这样做的(它是 CoffeeScript):
App.Store = DS.Store.extend {
revision: 13
adapter: DS.FixtureAdapter.extend {
queryFixtures: (fixtures, query, type) ->
console.log fixtures.get('length') # 2
fixtures = fixtures.filter (item) ->
for prop of query
if item[prop] != query[prop]
return false
return true
console.log fixtures.get('length') # 1
return fixtures
}
}
这是我的个人资料模型 + 固定装置:
App.Profile = DS.Model.extend {
name: DS.attr('string')
businessName: DS.attr('string')
picture: DS.attr('string')
isBusiness: DS.attr('boolean')
conversations: DS.hasMany('App.Conversation')
}
App.Profile.FIXTURES = [
{
id: 1
name: 'Jon Snow'
picture: 'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRDMu58ECeoIUUSMNPCEwWv4QAp4fT1fxXNK5AxK15I6GsAiBLC5Rl50zuOGQsDOedXbfE'
isBusiness: false
conversations: [101, 102]
}
{
id: 2
name: 'Jaime Lannister'
picture: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQB_K_IfaK-da-TbwgoM1NogXSc7QPVlaxaET76D8sdMoxAd1C2WCvnsKIM8-sGFpmiPPQ'
isBusiness: true
businessName: 'Westeros Inc.'
conversations: [103]
}
]
出于测试目的,我在 ApplicationRoute 的 init 方法中对 Profile 进行查询:
App.ApplicationRoute = Ember.Route.extend {
init: ->
profiles = App.Profile.find { isBusiness: false }
console.log profiles.get('length') # 0 ??
model: ->
return App.Profile.find()
}
如你所见,我在不同的地方记录了 fixtures.get('length')。
适配器中的第一个 console.log 返回“2”,即配置文件的总数(OK)。 适配器中的第二个 console.log 返回“1”,这意味着过滤器正在工作(OK)。 但是我不明白的是为什么路由器中的第三个console.log返回“0”。好像数据没有正确返回……
我不确定我做错了,是 Ember Data 中的错误,还是预期的行为。有什么想法吗?
仅供参考,这是我的 Ember 配置:
Ember.VERSION : 1.0.0-rc.6
Handlebars.VERSION : 1.0.0-rc.4
jQuery.VERSION : 2.0.3
【问题讨论】:
标签: ember.js ember-data