2015-11-11 3 views
4

Предположим, что у вас есть выберите выпадающий список, как это:Aurelia: Bind первоначально выбранное значение из опций, вставленных непосредственно в HTML

<select class="form-control" value.two-way="status"> 
    <option value="${'status_deceased' | t:notifier.signal}">${'status_deceased' | t:notifier.signal}</option> 
    <option value="${'status_duplicate' | t:notifier.signal}">${'status_duplicate' | t:notifier.signal}</option> 
</select> 

Вы можете просто игнорировать/абстрагироваться от фильтра i18n перевода и пользовательский язык изменен уведомитель, однако я оставил его там, чтобы проиллюстрировать, я не могу просто добавить эти параметры из файла .js.

Но мой вопрос в том, если вы сделаете это так. Введите свои параметры непосредственно в разметку, как бы вы установили исходное выбранное значение внутри файла .js?

Когда я делаю это так и добавляю @bindable status в мой .js файл, почему он говорит, что он не определен?

Теперь я ожидал, что выбранная (от начальной загрузки) опция из поля выбора в разметке, теперь будет доступна в файле .js, тем самым связавшись.

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

Как бы я выбрал выбранный вариант изначально, с помощью тегов html параметров, вставленных в разметку?

Edit:

Я также попытался, как это, используя value.bind вместо этого, и без bind.two-пути:

<select class="form-control" value.bind="status"> 
    <option value.bind="'status_deceased' | t:notifier.signal">${'status_deceased' | t:notifier.signal}</option> 
    <option value.bind="'status_duplicate' | t:notifier.signal">${'status_duplicate' | t:notifier.signal}</option> 
</select> 

Тем не менее он просто говорит нуль, когда я утешать журнал это из.

edit2

Благодаря комментарий Джереми решение оказалось:

1) значение вместо value.bind для варианта значений

<select class="form-control" value.bind="status"> 
    <option value="${'status_deceased' | t:notifier.signal}">${'status_deceased' | t:notifier.signal}</option> 
</select> 

2) установить начальное Привязываемое значение свойства внутри viewmodel, и внутри конструктора используйте i18n для программного перевода внутри viewmodel. Что-то наподобие, например:

import {inject, bindable} from 'aurelia-framework'; импорт {I18N} из 'aurelia-i18n';

@inject(I18N) 
export class App { 
    @bindable lolcat; 

    constructor(i18n){ 
    this.i18n = i18n; 
    this.lolcat = i18n.tr('test'); 
    } 

    lolcatChanged(value){ 
    this.lolcat = value; 
    } 
} 

ответ

4

При связывании приписывать выберите значение к свойству на вашей ViewModel, значение выбора кнопки элемента всегда инициализируются с тем, что значение свойства ViewModel есть.

Другими словами, перед назначением привязки данных необходимо присвоить желаемое начальное значение статусу состояния viewmodel.

export class App { 
    status = 'status_deceased'; 
} 
<select class="form-control" value.bind="status"> 
    <option value="status_deceased">${'status_deceased' | t:notifier.signal}</option> 
    <option value="status_duplicate">${'status_duplicate' | t:notifier.signal}</option> 
</select> 

Не уверен, если это ответил на ваш вопрос хотя- дайте мне знать, если я пропустил это.

+0

Привет, Джереми, проблема с этим подходом заключается в том, что я использую фильтры преобразования i18n и уведомитель в интерполяции стрингера.Таким образом, в этом случае я не могу установить начальное значение из модели viewmodel. Нет ли способа привязать начальное выбранное значение FROM view к viewmodel? http://plnkr.co/edit/FZteo2?p=preview – Dac0d3r

+0

Это оказалось проще, чем я думал. Я сделал то, что вы написали, и просто должен был использовать i18n для программного перевода первоначально установленной формы значения в пределах viewmodel. :) – Dac0d3r

+0

@Jeremy Как получить значение, когда был выбран параметр select. Я всегда получаю то же значение, что и первоначально связанное. – genericuser