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');
  });
});

На маршруте устанавливается имя сотрудника и местоположение...

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 ответа

Я закончил тем, что пропустил функцию и вместо этого сделал это:

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

Я до сих пор не понимаю, почему я не мог использовать эту функцию... Я также пытался переименовать контроллер... но это не было проблемой... как уже упоминалось ранее, два других значения для выборки в контроллер...

В любом случае, спасибо за попытку помочь мне!

Избавиться от ()

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();
Другие вопросы по тегам