#ember.js
#ember.js
Вопрос:
Вот проблема в jsbin: http://emberjs.jsbin.com/bahuvusa/29/edit
Когда у меня есть выбор, подобный этому:
{{view Ember.Select
contentBinding="items"
optionValuePath="content.value"
optionLabelPath="content.caption"
value=value
}}
Where items
задается в маршруте как an PromiseArray
, и данные выглядят следующим образом:
[
{value: 1, caption: "one"},
{value: 2, caption: "two"},
{value: 3, caption: "three"}
]
И у меня есть значение, установленное в контроллере:
value: function() {
return 2;
}.property()
При рендеринге шаблона я хотел бы видеть, что выбран второй элемент, но вместо этого значение устанавливается undefined
равным (см. jsbin).
Есть ли способ заставить это работать? (без создания элементов в модели ember-data и использования selectionBinding
)
Обновить
В итоге я использовал afterModel
перехват и вернул из него обещание: http://emberjs.jsbin.com/bahuvusa/40/edit
Комментарии:
Ответ №1:
Основываясь на комментариях к вашему сообщению, я взял часть кода из последнего комментария в этом тикете github.com/emberjs/ember.js/issues/1333 и внес некоторые небольшие изменения, вот как теперь выглядит код: http://emberjs.jsbin.com/bahuvusa/30/edit
Комментарии:
1. Спасибо за предложение! Мой пример был слишком надуманным, я обновил jsbin: emberjs.jsbin.com/bahuvusa/29/edit . В этом случае у контроллера уже есть другая модель, поэтому я не могу использовать
model
перехват..2. Я вижу, похоже, ваша проблема связана с проблемами, которые вы указали в комментариях, почему бы вам не попробовать какое-либо из приведенных там решений?, Я использовал одно из последних комментариев в этом выпуске github.com/emberjs/ember.js/issues/1333 и это сработало.
3. Я использовал почти тот же код, что и ссылка в предыдущем комментарии emberjs.jsbin.com/bahuvusa/30/edit
4. Сначала это казалось взломом, но я думаю, что это самое простое решение здесь. Спасибо,
fanta
! Вы можете обновить свой ответ, и я его приму
Ответ №2:
Вы можете привязать выделение к модели или свойству, которое хотите динамически обновлять, на основе этого события изменения выделения. Итак, назначьте модель или коллекцию selection
свойству, и вы также можете установить prompt
там:
{{view Ember.Select
contentBinding="content"
optionValuePath="content.value"
optionLabelPath="content.caption"
selection=model.value
prompt="Set the prompt"
value=value
}}
Пример JSBin: http://emberjs.jsbin.com/bahuvusa/27/edit
Это практически та же концепция / шаблон по всем направлениям, что и у помощников handlebars. Надеюсь, это пригодится!
Комментарии:
1. Спасибо, Мэтью! Дело в том, что я хочу, чтобы 2-й элемент был выбран при первом отображении шаблона (отсюда
value=value
и свойство в IndexController)2. @whatthewhat Ну, это асинхронно, поэтому вам нужно указать значение по умолчанию. Оно должно быть либо в модели, либо в свойстве контроллера. Для меня код работает правильно… Вы можете удалить приглашение, чтобы увидеть, что первое отображаемое значение равно 2.