我应该如何过滤用户的项目?
How should I filter items of a user?
我正在使用 Ember 1.13.2 和 Ember Data 1.13.4。 API 符合 JSON API 格式 (http://jsonapi.org/format).
一个用户有很多项。在模板中执行 {{model.items}}
将 return ALL 用户的项目。
如果我还需要仅显示来自用户的 blue 项目怎么办。我该怎么办?
// Route
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
// Executes: http://localhost:3099/api/v1/users/5
return this.store.findRecord('user', params.user_id);
}
})
// Template
firstName: {{model.firstName}} - works
<br>items: {{model.items}} - works
<br>blue items: {{model.items}} - what do we do about this?
// app/models/user.js
import DS from 'ember-data';
export default DS.Model.extend({
items: DS.hasMany('item', { async: true }),
firstName: DS.attr('string')
});
// app/models/item.js
import DS from 'ember-data';
export default DS.Model.extend({
user: DS.belongsTo('user', { async: true }),
name: DS.attr('string')
});
我误解了原来的问题。似乎您只想 获取 颜色为蓝色的项目(并避免获取其余部分)。为此,您需要查询服务器,这需要服务器端代码。但是,一旦你完成了服务器端代码,你就可以做这样的事情:
blueItems: Ember.computed('items.@each.color', {
get() {
const query = {
user: this.get('id'),
color: 'blue'
};
return this.get('store').find('item', query);
}
})
但同样,您需要服务器支持查询该数据。 (JSON API 说明了您需要如何 return 数据,但您需要自己实施查询。)
旧答案在抓取显示后过滤项目(仅供参考):
我会使用计算 属性:
blueItems: Ember.computed('items.@each.color', {
get() {
return this.get('items').filter((item) => {
return item.get('color') === 'blue';
});
}
})
或者 shorthand ;)
blueItems: Ember.computed.filterBy('items', 'color', 'blue')
并非每个操作都有 Ember shorthand 这就是为什么我首先给出完整示例的原因。
使用 promises 的计算属性有时会很棘手,但是这个计算的 属性 应该会在您的 items
数组更新时更新。
我正在使用 Ember 1.13.2 和 Ember Data 1.13.4。 API 符合 JSON API 格式 (http://jsonapi.org/format).
一个用户有很多项。在模板中执行 {{model.items}}
将 return ALL 用户的项目。
如果我还需要仅显示来自用户的 blue 项目怎么办。我该怎么办?
// Route
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
// Executes: http://localhost:3099/api/v1/users/5
return this.store.findRecord('user', params.user_id);
}
})
// Template
firstName: {{model.firstName}} - works
<br>items: {{model.items}} - works
<br>blue items: {{model.items}} - what do we do about this?
// app/models/user.js
import DS from 'ember-data';
export default DS.Model.extend({
items: DS.hasMany('item', { async: true }),
firstName: DS.attr('string')
});
// app/models/item.js
import DS from 'ember-data';
export default DS.Model.extend({
user: DS.belongsTo('user', { async: true }),
name: DS.attr('string')
});
我误解了原来的问题。似乎您只想 获取 颜色为蓝色的项目(并避免获取其余部分)。为此,您需要查询服务器,这需要服务器端代码。但是,一旦你完成了服务器端代码,你就可以做这样的事情:
blueItems: Ember.computed('items.@each.color', {
get() {
const query = {
user: this.get('id'),
color: 'blue'
};
return this.get('store').find('item', query);
}
})
但同样,您需要服务器支持查询该数据。 (JSON API 说明了您需要如何 return 数据,但您需要自己实施查询。)
旧答案在抓取显示后过滤项目(仅供参考):
我会使用计算 属性:
blueItems: Ember.computed('items.@each.color', {
get() {
return this.get('items').filter((item) => {
return item.get('color') === 'blue';
});
}
})
或者 shorthand ;)
blueItems: Ember.computed.filterBy('items', 'color', 'blue')
并非每个操作都有 Ember shorthand 这就是为什么我首先给出完整示例的原因。
使用 promises 的计算属性有时会很棘手,但是这个计算的 属性 应该会在您的 items
数组更新时更新。