Как предварительно выбрать значение на экране Ember.select

Я пытаюсь предварительно выбрать значение на экране Ember.select. Мой выбор работает отлично, но я не знаю, как предварительно выбрать значение динамически - или это невозможно в данный момент с Ember 1.8-beta и Ember Data Beta-11?

Это мой выбор:

{{view select
 class="uk-width-1-1"
 content=services
 optionLabelPath="content.name"
 ***************="content.id"
 prompt="Service"
 selectionBinding="selectedService"
}}

Он отлично работает, когда я пытаюсь получить текущее активное значение с this.get('selectedService'), но когда я пытаюсь установить конкретного клиента в своем контроллере (например, чтобы предварительно заполнить форму редактирования), ничего не происходит:

var service = timetracking.get('service');
this.set('selectedService', service);

Это мои модели:

App.Timetracking = DS.Model.extend({
 duration: DS.attr('number'),
 day: DS.attr('date'),
 notice: DS.attr('string'),
 project: DS.belongsTo('project', {async: true}),
 service: DS.belongsTo('service', {async: true}),
 user: DS.belongsTo('user', {async: true})
});

App.Service = DS.Model.extend({
 name: DS.attr('string'),
 description: DS.attr('string'),
 timetrackings: DS.hasMany('timetracking', {async: true}),
 archived: DS.attr('boolean')
});
2 ответа

поэтому вы установите значение поля выбора, установив "selectedService" в экземпляр, который вы хотите выбрать.

http://emberjs.jsbin.com/vuhefa

вы, кажется, делаете то же самое

var service = timetracking.get('service');
this.set('selectedService', service);

но поскольку сервис является асинхронным отношением, он вернет обещание и, следовательно, не будет правильной фактической моделью, попробуйте это установить

var context = this;
var service = timetracking.get('service').then(function(service){
 context.set('selectedService', service);
});

это правило, согласно которому асинхронные отношения возвращают обещания и встроенные отношения возвращают объекты


В вашем шаблоне можно просто использовать service от вашего контроллера/модели следующим образом:

{{view select
 class="uk-width-1-1"
 selection=service
 content=services
 optionLabelPath="content.name"
 ***************="content.id"
 prompt="Service"
}}

Опция selection указывает свойство, используемое для заполнения начального выбора. Он будет использовать этот объект вместе с optionLabelPath и *************** для настройки элемента <select> в DOM. Когда пользователь выбирает опцию, будет изменено такое же свойство selection, то есть service вашего контроллера/модели. ВАЖНО: поскольку вы используете привязку async для отношения service к вашей модели, вам нужно помочь выбрать вид, чтобы использовать содержимое прокси-сервера обещания, представляющего отношения. Сделайте это, используя псевдоним на вашем контроллере: App.TimetrackingController = Ember.ObjectController.extend({ service: Ember.computed.alias('content.service.content') }); Об этом более подробно говорится в выпуске Ember. </select>

licensed under cc by-sa 3.0 with attribution.