Associazione di opzioni di configurazione e dati
context.binding
L'oggetto di collegamento, se definito, fornisce l'accesso ai dati collegati a una vista. Esiste al massimo un bind di dati dichiarato per ciascuna vista.
È possibile accedere ai dati collegati a una vista utilizzando il costrutto this.context.binding.get("value"), dove value è un nome di proprietà speciale che restituisce il bind dei dati. Ad esempio, se una vista è associata a local.phoneBook.title, la vista può ottenere il titolo della rubrica nel modo seguente:
if (!! this.context.binding){
var title = this.context.binding.get("value")
}Il motivo principale per il bind delle viste ai dati è che la vista può essere notificata se i dati collegati sono stati modificati. Il framework della vista rileva le modifiche dei dati nell'oggetto collegato e notifica automaticamente la vista richiamando la relativa funzione gestore eventi change . È importante notare che queste notifiche verranno inviate alla vista solo se l'oggetto di collegamento stesso cambia, ma non se cambiano le proprietà o le proprietà secondarie. Le seguenti sezioni discutono i diversi tipi di dati e delineano i casi in cui è richiesto un codice aggiuntivo per la vista per ricevere la notifica di una modifica dei dati.Collegamento a tipi di dati semplici e complessi
Per tipi di dati semplici come stringhe e numeri, il framework della vista rileva le modifiche ai dati e notifica automaticamente la vista della modifica. Ad esempio, quando una vista è collegata al tipo di stringa semplice local.phoneBook.title, la funzione change() della vista viene richiamata con un evento di modifica che specifica che il titolo è stato modificato e il nuovo valore. Tutte le viste associate a local.phoneBook.title vengono notificate.
local.phoneBook, non a un tipo semplice come String. L'oggetto phoneBook ha diverse proprietà, una delle quali è title. Se si verifica una modifica alla proprietà title , la funzione di modifica non viene richiamata, poiché la vista è collegata all'oggetto phoneBook e non alla proprietà title . La funzione di modifica viene richiamata solo se l'intero oggetto phoneBook viene modificato. Se è necessaria una vista per sapere se una proprietà di un oggetto complesso è stata modificata, è necessario collegare manualmente la vista alla proprietà utilizzando la funzione bind() o bindAll() . Notare che è possibile utilizzare le funzioni bind() e bindAll() nello stesso modo per le opzioni di configurazione.bindAll() gestisce solo un livello nella struttura ad albero degli oggetti, quindi se l'oggetto ha più livelli (oggetti nidificati), la vista deve richiamare bindAll() più tempo per ogni livello di oggetto.- bind(path, callback, [scope])
- Notifica la vista tramite callback se una proprietà specificata è stata modificata. L'ambito è un parametro facoltativo che specifica l'ambito di contesto del callback. Restituisce un handle al callback.
- bindAll(callback, [scope])
- Notifica la vista tramite callback se una proprietà sull'oggetto è stata modificata. L'ambito è un parametro facoltativo che specifica l'ambito di contesto del callback. Restituisce un handle al callback.
Per la firma callback, consultare l'argomento function (event) .
var binding = this.context.binding.get("value"); //this is a complex object
this.property2Handle = binding.bind("property1.property2", function(e) {some code}, this);
this.property3Handle = binding.get("property3").bindAll(this.myBindAllChangeHandler, this);
......
this.mybindAllChangeHandler(event) { .....};Nell'esempio, la vista è collegata a un oggetto complesso e imposta un gestore di modifiche da notificare se binding.property1.property2 (che è una stringa) cambia. Inoltre, imposta un altro gestore modifiche per ricevere una notifica se una proprietà secondaria di property3 viene modificata. In entrambi i casi, l'ambito in cui viene richiamato il gestore modifiche è l'ambito this della vista.Collegamento a un tipo di elenco
Quando si esegue il bind a un elenco, la vista viene automaticamente notificata quando l'intero oggetto Elenco cambia. Ad esempio, considerare che la vista è collegata all'elenco local.phoneBook.person[]. Se un nuovo elenco di persone viene creato e impostato sul bind della vista, ad esempio utilizzando la sintassi dello script del server tw.local.phoneBook.person = new tw.object.listOf.person(); il framework notifica automaticamente la modifica alla vista.
Collegamento agli aggiornamenti dell'elenco
bindAll() . Nel seguente esempio di codice, la funzione listUpdated della vista viene richiamata ogni volta che un elemento dell'elenco viene aggiunto, rimosso o sostituito.var binding = this.context.binding.get("value"); //this is a List object
this.bindAllHandle = binding.bindAll(this.listUpdated, this);Collegamento alle proprietà dell'elenco
Oltre agli elementi di un elenco, un elenco dispone anche di proprietà speciali, ad esempio una proprietà che definisce gli elementi dell'elenco selezionati dall'utente. Le proprietà speciali sono descritte nella tabella seguente.| Proprietà | Immettere | Descrizione |
|---|---|---|
| listAllSelectedIndices | Matrice | Gli indici degli elementi dell'elenco selezionati da un utente. Può essere selezionato più di un indice. Quando si imposta listAllSelectedIndices, si passano gli indici in un array. Utilizzare listAllSelectedIndices quando si aggiorna la selezione dell'elenco. |
| listAllSelected | Matrice | Un array di tutti gli elementi selezionati da un utente. Utilizzare listAllSelected per sottoscrivere una modifica a questa proprietà. questa proprietà è di sola lettura. |
| listSelectedIndex | Numero intero | L'indice dell'elemento selezionato. Questo valore corrisponde al valore dell'elemento di indice 0 della matrice listAllSelectedIndices. Utilizzare listSelectedIndex per sottoscrivere una modifica a questa proprietà. questa proprietà è di sola lettura. |
| listSelected | Oggetto | L'elemento selezionato. Questo valore corrisponde al valore dell'elemento di indice 0 della matrice listAllSelected. Utilizzare listSelected per sottoscrivere una modifica a questa proprietà. questa proprietà è di sola lettura. |
bindAll() non include queste proprietà speciali.bind() . In generale, è sufficiente sottoscrivere una proprietà speciale (vale a dire, non è necessario sottoscrivere tutte le proprietà speciali). Il seguente codice di esempio può essere aggiunto a un gestore eventi di caricamento per richiamare la funzione indicesChanged di una vista ogni volta che il valore di listAllSelectedIndices cambia.var binding = this.context.binding.get("value"); //this is a list
this.selectedIndicesHandle = binding.bind("listAllSelectedIndices", this.indicesChanged, this);
Accesso agli elementi dell'elenco
- Utilizzare
get("value")per ottenere l'oggetto elenco. Ad esempio:list = this.context.binding.get("value") - Utilizzare
get(index)per ottenere l'elemento indicizzato. Ad esempio:list.get(0)per ottenere il primo elemento. - Utilizzare
get(property)per ottenere il valore della proprietà. Ad esempio:list.get("listSelected")per ottenere il valore della proprietàlistSelected. Utilizzare una sintassi simile per ottenere i valori di tutte le altre proprietà. - Utilizzare
itemsper ottenere un assieme che rappresenta gli elementi sottostanti dell'elenco. Ad esempio,list.items. I dati restituiti daitemsnon devono essere modificati.
Elenca operazioni
Le seguenti API vengono utilizzate per modificare un elenco e per ottenere informazioni su un elenco.- Per aggiungere un oggetto, utilizzare
list.add(item). Ad esempio,this.context.binding.get("value").add(item) - Per eliminare un oggetto, utilizzare
list.remove(index), ad esempiothis.context.binding.get("value").remove(0) - Per sostituire un oggetto, utilizzare
list.put(index, item). Ad esempio,this.context.binding.get("value").put(0, item) - Per ottenere la lunghezza di un elenco, utilizzare
list.length(). - Per ottenere un elemento indicizzato o una proprietà dell'elenco, utilizzare
list.get(index | property). Consultare Accesso agli elementi dell'elenco in precedenza. - Per aggiornare in modo programmatico la proprietà selezionata nell'elenco, utilizzare
list.set(property). Ad esempio,this.context.binding.get("value").set("listAllSelectedIndices", [1, 2, 3]);
Ripulitura delle risorse associate
bind o bindAll restituisce un handle che può essere utilizzato per ripulire il bind. È necessario rilasciare le risorse collegate nel gestore eventi unload() o ogni volta che l'intero oggetto di collegamento viene modificato. Quando si verifica una modifica dei dati di bind, una vista deve annullare il bind manuale e ricollegarsi all'oggetto context.binding richiamando nuovamente bind e bindAll . Ad esempio, aggiungere il codice seguente nel gestore eventi di modifica:if (event.type != "config"){
var binding = this.context.binding.get("value"); //this is a list
// assumes that this.selectedIndicesHandle was initialized in the load function
this.selectedIndicesHandle.unbind();
this.selectedIndicesHandle = binding.bind("listAllSelectedIndices", this.indicesChanged, this);
// assumes that this.selectedIndicesHandle was initialized in the load function
this.bindAllHandle.unbind();
this.bindAllHandle = binding.bindAll(this.listUpdated, this);
}
Opzioni di configurazione
Oltre ai dati, anche le viste possono essere collegate alle opzioni di configurazione. Una visualizzazione può avere più opzioni di configurazione. Ad esempio, l'etichetta di un controllo pulsante è una proprietà di configurazione. I valori per la configurazione possono essere richiamati utilizzando l'oggettothis.context.options della vista. L'oggetto context.options contiene una proprietà di metadati predefinita oltre alle proprietà definite dall'utente configurabili per una vista.| Opzione | Immettere | Descrizione |
|---|---|---|
| etichetta | La stringa | Il valore dell'etichetta della vista, se presente |
| visibilità | La stringa | Impostazioni di visibilità della vista. I valori validi sono: "DEFAULT" | '"EDITABLE" | '"REQUIRED" | '"READONLY" | '"NONE" | '"HIDDEN". Vedere L'oggetto contesto. DEFAULT è il codice equivalente a 'Same as parent che gli utenti vedono sullo schermo in un elenco di visibilità.Importante: le tabelle hanno una proprietà di configurazione Disabilita click - to - edit . Il valore predefinito è false, il che significa che le viste contenute in tale tabella utilizzano le impostazioni di visibilità della tabella. In altre parole, le viste in una determinata cella sono
READONLY fino a quando l'utente non fa clic nella cella. Le viste vengono quindi EDITABLE finché l'utente non fa clic in un punto qualsiasi all'esterno della cella. Le viste tornano ad essere READONLY. Quando Disabilita click - to - edit è true, queste viste utilizzano le proprie impostazioni di visibilità.Importante: l'impostazione della visibilità su
REQUIRED non convalida se un utente ha immesso o impostato un valore. È necessario fornire il codice che esegue questo controllo, ad esempio implementando un servizio di convalida per il coach che contiene la vista. |
| labelVisibility | La stringa | Impostazioni di visibilità dell'etichetta. I valori validi sono "SHOW" | "HIDE". |
| helpText | La stringa | La vista può utilizzare questa proprietà come testo a comparsa |
| className | La stringa | Il nome o i nomi classe CSS specificati. Di solito, non è necessario utilizzare questa vista poiché i nomi delle classi CSS vengono inseriti nell'attributo DOM della vista. |
| htmlOverrides | Associazione | Un'associazione delle coppie nome/valore che rappresenta l'attributo HTML specificato. Queste coppie nome/valore sono inserite nell'attributo DOM della vista. |
- Per ottenere le opzioni predefinite di una vista, utilizzare
this.context.options._metadata.*. Ad esempio, per ottenere l'opzione di visibilità di una vista, utilizzarethis.context.options._metadata.visibility.get("value"); - Per impostare le opzioni predefinite di una vista, utilizzare
this.context.options._metadata.*. Ad esempio, per impostare l'opzione di visibilità di una vista, utilizzarethis.context.options._metadata.visibility.set("value", newValue); - Per ottenere un'opzione di configurazione definita dall'utente, utilizzare
this.context.options.myOption.get("value");, dovemyOptionè il nome dell'opzione. - Per impostare un'opzione di configurazione definita dall'utente, utilizzare
this.context.options.myOption.set("value", newValue);, dovemyOptionè il nome dell'opzione.
Per serializzare l'oggetto di bind dei dati in una stringa JSON, è possibile richiamare la funzione toJson() sull'oggetto di bind dei dati. Per richiamare un oggetto JavaScript di base che rappresenta il bind dei dati, è possibile richiamare toJSObject().