Nella mia applicazione ho realizzato molti "servizi" che posso iniettare nei miei modelli viewmodels per risparmiare som ridondanza e tempo.Associazione dati bidirezionale in elementi personalizzati Aurelia: collegamento di elementi personalizzati alla finestra principale del modello
Ora sto cercando di fare un ulteriore passo avanti, e rendere quegli elementi del modulo (selezionare, testo, caselle di controllo - un menu a discesa di selezione per gli avviatori) e trasformarli in elementi personalizzati, inserendo il servizio solo nell'elemento personalizzato.
Posso farlo funzionare in una certa misura. L'elemento personalizzato (selezionare in questo caso) viene mostrato quando lo richiedo nella vista "genitore", tuttavia quando cambio il valore selezionato dell'elemento di selezione personalizzato, non si associa al viewmodel "genitore", che è il mio requisito .
Desidero essere in grado di associare il mio valore selezionato dall'elemento personalizzato a una proprietà sul viewmodel "principale" tramite l'attributo di bind nel suo modello.
aggiornerò quale frammento di codice in pochi minuti.
create.js (quello che mi riferisco a come viewmodel genitore)
import {bindable} from 'aurelia-framework';
export class Create{
heading = 'Create';
@bindable myCustomElementValue = 'initial value';
}
create.html (vista padre)
<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>
my-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();
}
}
Cosa succede inizialmente la vista create.html restituisce "valore iniziale", e mentre cambio il valore dell'elemento personalizzato select, il valore appena selezionato Viene avvisato, ma non aggiorna la variabile genitore legata, che sta ancora mostrando semplicemente "valore iniziale".
Wow thanks so tanto. Che risposta straordinaria. In realtà la cosa del caso del serpente era solo un refuso nel codice di esempio, ma il .two-way ha fatto la differenza! : D Posso chiederti cosa preferisci - decoratore o .two-way? – Dac0d3r
È necessario impostare la modalità di associazione predefinita su ciò che altre persone (o se stessi) si aspetterebbero che fosse. Direi di impostarlo su due vie di default in questo esempio in quanto è l'uso più naturale del tuo controllo: quasi sempre vorrai che il valore selezionato sia vincolato a due vie. Questo è il modo in cui Aurelia usa le convenzioni e funziona bene. – Charleh
+1 e grazie per la menzione del rivestimento del serpente. Non ho visto quello menzionato in documenti come l'esempio erano variabili di una parola. Impazzire cercando di capire un legame non ha funzionato quando è stato fatto proprio come gli altri. – Danomite