Как предварительно выбрать значение на экране 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.