Ember-rails:函数为我的计算值返回'undefined'

时间:2014-10-28 15:44:29

标签: ember.js ember-rails

此处的两个功能都返回' undefined'。我无法弄清楚问题是什么......看起来很直接?

在控制器中,我设置了一些属性,向用户显示一个空的文本字段,以确保他们输入自己的数据。

Amber.ProductController = Ember.ObjectController.extend ({
    quantity_property: "",
    location_property: "",
    employee_name_property: "",

//quantitySubtract: function() {
//return this.get('quantity') -= this.get('quantity_property');
//}.property('quantity', 'quantity_property')

  quantitySubtract: Ember.computed('quantity', 'quantity_property', function() {
    return this.get('quantity') - this.get('quantity_property');
  });
});

在路线中,正在设置employeeName和location ...

Amber.ProductsUpdateRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('product', params.product_id);
  },
//This defines the actions that we want to expose to the template
  actions: {
    update: function() {
      var product = this.get('currentModel');
      var self = this; //ensures access to the transitionTo method inside the success (Promises) function
  /*  The first parameter to 'then' is the success handler where it transitions
      to the list of products, and the second parameter is our failure handler:
      A function that does nothing.  */
      product.set('employeeName', this.get('controller.employee_name_property'))
      product.set('location', this.get('controller.location_property'))
      product.set('quantity', this.get('controller.quantitySubtract()'))
      product.save().then(
        function() { self.transitionTo('products') },
        function() { }
      );
    }
  }
});

车把没什么特别的

<h1>Produkt Forbrug</h1>
<form {{action "update" on="submit"}}>
   ...
<div>
  <label>
  Antal<br>
  {{input type="text" value=quantity_property}}
  </label>
  {{#each error in errors.quantity}}
    <p class="error">{{error.message}}</p>
  {{/each}}
</div>
<button type="update">Save</button>
</form>

2 个答案:

答案 0 :(得分:0)

摆脱()

product.set('quantity', this.get('controller.quantitySubtract'))

这种方式很好:

quantitySubtract: function() {
  return this.get('quantity') - this.get('quantity_property');
}.property('quantity', 'quantity_property')

更新

看到你的路线,该控制器不适用于该路线,它只是使用通用的Ember.ObjectController

Amber.ProductController会转到Amber.ProductRoute

Amber.ProductUpdateController会转到Amber.ProductUpdateRoute

如果你想为两条路线重复使用控制器,只需像这样扩展产品控制器。

Amber.ProductController = Ember.ObjectController.extend ({
  quantity_property: "",
  location_property: "",
  employee_name_property: "",

  quantitySubtract: function() {
    return this.get('quantity') - this.get('quantity_property');
  }.property('quantity', 'quantity_property')
});

Amber.ProductUpdateController = Amber.ProductController.extend();

答案 1 :(得分:0)

我最终跳过了这个功能,而是这样做了:

product.set('quantity', 
  this.get('controller.quantity') - this.get('controller.quantity_property'))

我仍然不明白为什么我不能使用该功能..我也试图重命名控制器..但这不是问题..正如之前提到的其他两个值提取到控制器...

无论如何,谢谢你试图帮助我!