ember: 无法从服务访问模型
ember: cannot access model from service
我正在开发一个将被注入的购物车服务,我正在使用 ember-data 来存储购物车数据(因为我需要将购物车持久化到后端)。
当然,在服务中,我需要在购物车数据上创建计算属性,以便我可以提供数量总和和总计。
但我真的 真的 很难从商店访问 'cart' 模型来执行此操作。这是我尝试要做的事情:
export default Service.extend({
store: inject.service(),
cartObj: null, // set in init() so cart data can be used in computed properties
init() {
this._super(...arguments);
// get cart model from store, set it to property on the service
let cartObj = this.get('store').peekAll('cart').get('firstObject');
set(this, 'cartObj', cartObj);
},
lineItems: computed('cartObj.cartitems.[]', function() {
// cartitems is a collection stored in each cart object
return get(this, 'cartObj.cartitems');
}),
total: computed.sum('itemPrices'), // cart total
...
无论我在 init() 中尝试什么:this.get('store').peekAll('cart').get('firstObject')
或 this.store.peekAll('cart').get('firstObject')
或与 .objectAt(0)
相同的变体...都不起作用。
我得到有关 "get" 不是函数的错误,或者 cartObj
赋值计算为 null
即使模型在那里,里面有数据:
我在这里错过了什么?
第一次注入 cart
服务时,它会创建实例并调用 init 方法,您只需要确保到那时存储已经充满 cart
模型。
或者你可以尝试计算 属性,
cartObj: Ember.computed(function(){
this.get('store').peekAll('cart').get('firstObject');
})
我正在开发一个将被注入的购物车服务,我正在使用 ember-data 来存储购物车数据(因为我需要将购物车持久化到后端)。
当然,在服务中,我需要在购物车数据上创建计算属性,以便我可以提供数量总和和总计。
但我真的 真的 很难从商店访问 'cart' 模型来执行此操作。这是我尝试要做的事情:
export default Service.extend({
store: inject.service(),
cartObj: null, // set in init() so cart data can be used in computed properties
init() {
this._super(...arguments);
// get cart model from store, set it to property on the service
let cartObj = this.get('store').peekAll('cart').get('firstObject');
set(this, 'cartObj', cartObj);
},
lineItems: computed('cartObj.cartitems.[]', function() {
// cartitems is a collection stored in each cart object
return get(this, 'cartObj.cartitems');
}),
total: computed.sum('itemPrices'), // cart total
...
无论我在 init() 中尝试什么:this.get('store').peekAll('cart').get('firstObject')
或 this.store.peekAll('cart').get('firstObject')
或与 .objectAt(0)
相同的变体...都不起作用。
我得到有关 "get" 不是函数的错误,或者 cartObj
赋值计算为 null
即使模型在那里,里面有数据:
我在这里错过了什么?
第一次注入 cart
服务时,它会创建实例并调用 init 方法,您只需要确保到那时存储已经充满 cart
模型。
或者你可以尝试计算 属性,
cartObj: Ember.computed(function(){
this.get('store').peekAll('cart').get('firstObject');
})