我希望有一个服务对象的计算属性,并且在执行此操作时遇到了麻烦。我有购物车服务和商店路线,允许客户挑选物品并将其添加到购物车。将它们添加到购物车时没有问题,但是当我尝试从控制器或路径添加计算属性时,它们永远不会在对象(cart和cartTotal)发生变化时触发。
这是推车服务:
export default Ember.Service.extend({
cart: [],
currentTotal: 0,
addToCart(product){
// TODO add promise here
this.get('cart').push(product);
this.get('updateTotal')(this);
},
updateTotal: function(context){
debugger;
var total = 0;
context.get('cart').forEach(function(product){
total += parseInt(product.get('price'));
}.bind(total));
context.set('currentTotal', total);
},
...
这是我的店铺管理员:
const { service } = Ember.inject;
export default Ember.Controller.extend({
cart: service('cart'),
products: null,
productGroupings: null,
menus: null,
currentMenu: Ember.computed.oneWay('cart.currentMenu'),
menus: Ember.computed.oneWay('cart.menus'),
cartTotal: Ember.computed.oneWay('cart.cartTotal'),
...
它也失败了观察者设置属性以及使用别名取代了一个人。'这也在路线上失败了。我目前正在运行Ember 1.13.8。
谢谢!
答案 0 :(得分:2)
是的,这是可能的。你只是忘了在两个函数的末尾添加.property():
addToCart(product){
// TODO add promise here
this.get('cart').push(product);
this.get('updateTotal')(this);
}.property('cart', 'updateTotal'),
答案 1 :(得分:1)
刚才意识到我忘了在推送周围添加this.notifyPropertyDidChange。如果没有该集,则计算属性永远不会被触发。添加即可修复它。