Я пытался получить значение свойства компонента из действия из его класса. Моя основная цель — связать два объекта: аукцион перешел в мой компонент (показан в коде ниже)
new.hbs
<AuctionForm
@auction={{@model.auction}}
@products={{@model.products}}/>
с выбранным продуктом в теге select внутри компонента AuctionForm следующим образом:
аукцион-form.hbs
<div class="row">
<label for="product">Produto</label>
<select name="product" onchange={{action 'selectProduct' value='target.value'}}>
<option value="" selected='selected' disabled='disabled'>-------</option>
{{#each @products as |product|}}
<option value="{{product.id}}" selected={{if (equalstr product.id @auction.product.id) 'selected'}}>{{product.name}}</option>
{{/each}}
</select>
</div>
и я хочу связать эти два объекта с действием selectProduct класса:
аукцион-form.js
import Component from '@glimmer/component';
import { action } from '@ember/object';
export default class AuctionFormComponent extends Component {
@action selectProduct(product) {
this.get('auction').set('product', product); // this doesn't work on ember newest version
}
@action save(auction) {
auction.save();
}
}
Хотя всякий раз, когда я пытаюсь получить доступ к его значению в классе-компоненте через функцию this.get() (так же, как я делал это в предыдущих версиях Ember), я получаю сообщение об ошибке, говорящее, что this.get не является функцией.
После долгих поисков в Интернете я не смог найти ни простого решения, ни официального решения, предоставленного документацией.
Самое близкое к решению, которое я нашел, было объявить аукцион как вычисляемое свойство (https://api.emberjs.com/ember/3.22/classes/Component). Но мне не удалось реализовать его в файле javascript, поскольку его структура (например, код ниже) работает только с файлами TypeScript.
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { computed } from '@ember/object';
export default class AuctionFormComponent extends Component {
auction: computed('auction', function() {
return this.auction;
}
@action selectProduct(product) {
debugger;
this.get('auction').set('product', product);
}
@action save(auction) {
auction.save();
}
}
Кто-нибудь знает, как правильно выполнить такую задачу в ember 3.22?
Спасибо большое.