Ember计算服务属性

时间:2015-10-06 17:24:05

标签: ember.js service ember-data ember-cli

我希望有一个服务对象的计算属性,并且在执行此操作时遇到了麻烦。我有购物车服务和商店路线,允许客户挑选物品并将其添加到购物车。将它们添加到购物车时没有问题,但是当我尝试从控制器或路径添加计算属性时,它们永远不会在对象(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。

谢谢!

2 个答案:

答案 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。如果没有该集,则计算属性永远不会被触发。添加即可修复它。