В моем приложении я сделал много «сервисов», которые я могу вводить в своих режимах просмотра, чтобы сохранить избыточность и время.2-сторонняя привязка данных в пользовательских элементах Aurelia - привязка настраиваемого элемента к родительской схеме просмотра.
Теперь я ищу еще один шаг и сделаю эти элементы формы (выберите, текст, флажки - выберите раскрывающийся список для стартеров) и превратите их в пользовательские элементы, введя службу только в пользовательский элемент.
Я могу заставить его работать в некоторой степени. Пользовательский элемент (выберите в этом случае) отображается, когда я требую его в «родительском» представлении, однако, когда я изменяю выбранное значение пользовательского элемента select, он не привязывается к «родительской» модели просмотра, что является моим требованием ,
Я хочу, чтобы иметь возможность привязать мое выбранное значение от пользовательского элемента к свойству в «родительской» модели просмотра через атрибут bind в его шаблоне.
Я расскажу о небольшом фрагменте кода за несколько минут.
create.js (то, что я имею в виду, как родительский ViewModel)
import {bindable} from 'aurelia-framework';
export class Create{
heading = 'Create';
@bindable myCustomElementValue = 'initial value';
}
create.html (родительский вид)
<template>
<require from="shared/my-custom-element"></require>
<my-custom selectedValue.bind="myCustomElementValue"></my-custom>
<p>The output of ${myCustomElementValue} should ideally be shown and changed here, as the select dropdown changes</p>
</template>
мои-custom.js
import { inject, bindable} from 'aurelia-framework';
import MyService from 'my-service';
@inject(MyService)
export class MyCustomCustomElement {
@bindable selectedValue;
constructor(myService) {
this.myService = myService ;
}
selectedValueChanged(value) {
alert(value);
this.selectedValue = value;
}
async attached() {
this.allSelectableValues = await this.myService.getAllValues();
}
}
Что происходит изначально, представление create.html выводит «начальное значение», и когда я изменяю значение выбранного пользовательского элемента, вновь выбранная оценка e получает предупреждение, но он не обновляет связанную родительскую переменную, которая по-прежнему просто отображает «начальное значение».
Вау спасибо много. Какой замечательный ответ. На самом деле вещь змеиного дела была просто опечаткой в образце кода, но .two-way все это изменило! : D Могу ли я спросить вас, что вы предпочитаете - декоратор или два пути? – Dac0d3r
Вы должны установить режим привязки по умолчанию к тому, что ожидали бы другие люди (или вы сами). Я бы сказал, что в этом примере по умолчанию задано значение «по два пути», так как это наиболее естественное использование вашего элемента управления - вы почти всегда хотите, чтобы «selected-value» связывал двусторонний. Именно так Aurelia использует условные обозначения, и он работает хорошо. – Charleh
+1 и спасибо за упоминание змеиной оболочки. Я не видел, чтобы это упоминалось в документах, так как в качестве примера были одни переменные слов. Сумасшедший, пытаясь выяснить привязку, не работал, когда это было сделано просто так же, как и другие. – Danomite