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();