Options de configuration données de liaison et de configuration
context.binding
L'objet de liaison, s'il est défini, permet d'accéder à des données qui sont liées à une vue. Il existe au moins une liaison de données déclarée pour chaque vue.
Vous pouvez accéder aux données liées à une vue à l'aide de la construction: this.context.binding.get("value")
, où value est un nom de propriété spécial qui renvoie la liaison de données. Par exemple, si une vue est liée à local.phoneBook.title
, la vue peut obtenir le titre de l'annuaire téléphonique comme suit:
if (!! this.context.binding){
var title = this.context.binding.get("value")
}
Les vues se lient aux données principalement pour être averties des modifications des données. La structure de vue détecte les modifications de données dans l'objet lié et avertit automatiquement la vue en appelant sa fonction du gestionnaire d'événements change
. Il est important de noter que ces notifications seront envoyées à la vue uniquement si l'objet de liaison lui-même change, mais pas si l'une de ses propriétés ou sous-propriétés change. Les sections suivantes décrivent les différents types de données et les cas où du code supplémentaire est nécessaire pour que la vue puisse recevoir une notification de modification des données.Liaison à des types de données simples et complexes
Pour les types de données simples, tels que les chaînes et les nombres, la structure de vue détecte les modifications de données et signale automatiquement les modifications à la vue. Par exemple, lorsqu'une vue est liée à la chaîne de type simple local.phoneBook.title
, la fonction change()
de la vue est appelée avec un événement de modification qui indique que le titre a changé et sa nouvelle valeur. Toutes les vues qui sont liées à local.phoneBook.title
sont averties.
local.phoneBook
et non pas à un type simple comme une chaîne. L'objet phoneBook
a plusieurs propriétés, notamment title
. S'il y a une modification de la propriété title
, la fonction de modification n'est pas appelée car la vue est liée à l'objet phoneBook
et non à la propriété title
. La fonction de modification est appelée uniquement si la totalité de l'objet phoneBook
est modifié. S'il est nécessaire qu'une vue sache si une propriété d'un objet complexe a changé, vous devez lier manuellement la vue à la propriété à l'aide de la fonction bind()
ou bindAll()
. Notez que vous pouvez utiliser les fonctions bind()
et bindAll()
de la même manière pour les options de configuration.bindAll()
ne gère qu'un niveau de profondeur dans l'arborescence des objets. Par conséquent, si l'objet comporte plusieurs niveaux (objets imbriqués), la vue doit appeler des multiples de temps bindAll()
pour chaque niveau d'objet.- bind(path, callback, [scope])
- Indique la vue via un rappel si une propriété indiquée a changé. Scope est un paramètre facultatif qui définit la portée contextuelle du rappel. Retourne un descripteur au rappel.
- bindAll(callback, [scope])
- Notifie la vue via un rappel si une propriété de l'objet a été modifié. Scope est un paramètre facultatif qui définit la portée contextuelle du rappel. Retourne un descripteur au rappel.
Pour la signature de rappel, voir la rubrique fonction (événement) .
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) { .....};
Dans cet exemple, la vue est liée à un objet complexe et définit un gestionnaire de modifications à avertir si binding.property1.property2
(une chaîne) change. Elle définit également un autre gestionnaire de modifications à informer si une sous-propriété property3
change. Dans les deux cas, la portée dans laquelle le gestionnaire de modifications est appelé est la portée this
de la vue.Liaison à un type de liste
Lorsque vous effectuez une liaison à une liste, la vue est automatiquement averti lorsque tout l'objet Liste change. Par exemple, supposons que la vue est liée à la liste local.phoneBook.person[]
. Si une nouvelle liste de personnes est créée et définie sur la liaison de la vue, par exemple, à l'aide de la syntaxe de script du serveur tw.local.phoneBook.person = new tw.object.listOf.person();
, la structure informe automatiquement la vue du changement.
Liaison aux mises à jour de la liste
bindAll()
. Dans l'exemple de code, la fonction listUpdated
de la vue est appelée chaque fois qu'un élément de liste est ajouté, supprimé ou modifié.var binding = this.context.binding.get("value"); //this is a List object
this.bindAllHandle = binding.bindAll(this.listUpdated, this);
Liaison aux propriétés de la liste
Outre les éléments, une liste possède également des propriétés spéciales, telle qu'une propriété qui définit les éléments de liste sélectionnés par un utilisateur. Les propriétés spéciales sont décrites dans le tableau suivant.Propriété | Type | Description |
---|---|---|
listAllSelectedIndices | Tableau | Index des éléments de liste sélectionnées par un utilisateur. Plusieurs index peuvent être sélectionnés. Lorsque vous définissez listAllSelectedIndices, vous envoyez les index dans un tableau. Utilisez listAllSelectedIndices lors de la mise à niveau de la sélection de liste. |
listAllSelected | Tableau | Tableau de tous les éléments qu'un utilisateur a sélectionné. Utilisez listAllSelected pour vous abonner à une modification à cette propriété. Cette propriété est en lecture seule. |
listSelectedIndex | Entier | Index de l'élément sélectionné. Cette valeur correspond à la valeur de l'élément d'index 0 du tableau listAllSelectedIndices. Utilisez listSelectedIndex pour vous abonner à une modification à cette propriété. Cette propriété est en lecture seule. |
listSelected | Objet | Elément sélectionné. Cette valeur correspond à la valeur de l'élément d'index 0 du tableau listAllSelected. Utilisez listSelected pour vous abonner à une modification à cette propriété. Cette propriété est en lecture seule. |
bindAll()
ne contient pas ces propriétés spéciales.bind()
. En règle générale, il suffit de s'abonner à une propriété spéciale (à savoir qu'il n'est pas nécessaire de s'abonner à toutes les propriétés spéciales). L'exemple de code suivant pourrait être ajouté à un gestionnaire d'événements de chargement pour appeler la fonction indicesChanged
d'une vue chaque fois que la valeur de listAllSelectedIndices
change.var binding = this.context.binding.get("value"); //this is a list
this.selectedIndicesHandle = binding.bind("listAllSelectedIndices", this.indicesChanged, this);
Accès aux éléments d'une liste
- Utilisez
get("value")
pour obtenir l'objet liste. Par exemple :list = this.context.binding.get("value")
- Utilisez
get(index)
pour obtenir l'élément indexé. Par exemple,list.get(0)
pour obtenir le premier élément. - Utilisez
get(property)
pour obtenir la valeur de la propriété. Par exemple,list.get("listSelected")
pour obtenir la valeur de la propriétélistSelected
. Utilisez la même syntaxe pour obtenir les valeurs de toutes les autres propriétés. - Utilisez
items
pour obtenir un tableau qui représente les éléments sous-jacents de la liste. Par exemple,list.items
. Les données retournées paritems
ne doivent pas être modifiées.
Opérations de liste
Les API suivantes sont utilisées pour modifier une liste et pour obtenir des informations sur une liste.- Pour ajouter un objet, utilisez
list.add(item)
. Exemple :this.context.binding.get("value").add(item)
- Pour supprimer un objet, utilisez
list.remove(index)
, Par exemple,this.context.binding.get("value").remove(0)
- Pour remplacer un objet, utilisez
list.put(index, item)
. Exemple :this.context.binding.get("value").put(0, item)
- Pour obtenir la longueur d'une liste, utilisez
list.length()
. - Pour obtenir un élément ou une propriété indexée de la liste, utilisez
list.get(index | property)
. Voir Accès aux éléments de liste précédemment. - Pour mettre à jour par programmation la propriété sélectionnée dans la liste, utilisez
use
list.set(property)
. Exemple :this.context.binding.get("value").set("listAllSelectedIndices", [1, 2, 3]);
Nettoyage des ressources liées
bind
ou bindAll
renvoie un descripteur qui peut être utilisé pour nettoyer la liaison. Vous devez libérer les ressources liées dans le gestionnaire d'événements unload()
ou chaque fois que l'ensemble de l'objet de liaison est modifié. Lorsqu'une modification de liaison de données se produit, une vue doit délier la liaison manuelle et se relier à l'objet context.binding
en appelant bind
et bindAll
. Par exemple, ajoutez le code suivant dans le gestionnaire d'événements de chargement :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);
}
Options de configuration
Outre les données, des vues peuvent également être associées à des options de configuration. Une vue peut avoir plusieurs options de configuration. Par exemple, le libellé d'un bouton de contrôle est une propriété de configuration. Les valeurs de la configuration peuvent être extraites en utilisant l'objetthis.context.options
de la vue. L'objet context.options
contient une propriété prédéfinie de métadonnées en plus des propriétés définies par l'utilisateur qui sont configurables pour une vue.Option | Type | Description |
---|---|---|
libellé | Chaîne | Valeur du libellé de la vue, s'il existe. |
visibilité | Chaîne | Paramètres de visibilité de la vue. Les valeurs valides sont les suivantes : "DEFAULT" | '"EDITABLE" | '"REQUIRED" | '"READONLY" | '"NONE" | '"HIDDEN" . Voir l'objet contextuel. le DEFAULT est le code équivalent au " Same as parent que les utilisateurs voient à l'écran dans une liste de visibilité.Important: Les tables comportent une propriété de configuration Désactiver le clic pour éditer . La valeur par défaut est false, ce qui signifie que les vues contenues dans cette table utilisent les paramètres de visibilité de la table. En d'autres termes, les vues d'une cellule donnée sont
READONLY jusqu'à ce que l'utilisateur clique dans la cellule. Les vues sont ensuite EDITABLE jusqu'à ce que l'utilisateur clique en dehors de la cellule. Les vues redeviennent READONLY . Lorsque Désactiver Cliquer-pour-modifier a la valeur true, ces vues utilisent leurs propres paramètres de visibilité.Important: La définition de la visibilité sur
REQUIRED ne valide pas si un utilisateur a entré ou défini une valeur. Vous devez fournir le code qui effectue cette vérification en implémentant, par exemple, un service de validation pour le coach qui contient la vue. |
labelVisibility | Chaîne | Paramètres de visibilité du libellé. Les valeurs admises sont "SHOW" | "HIDE" . |
helpText | Chaîne | La vue peut utiliser cette propriété comme infobulle |
className | Chaîne | Nom(s) de classe CSS définie. Généralement, une vue n'a pas besoin de l'utiliser, car les noms de classe CSS sont insérés dans l'attribut DOM de la vue. |
htmlOverrides | Mappe | Mappe de paire nom-valeur qui représente l'attribut HTML spécifié. Ces paires nom-valeur sont insérées dans l'attribut DOM de la vue. |
- Pour obtenir les options prédéfinies d'une vue, utilisez
this.context.options._metadata.*
Par exemple, pour obtenir l'option de visibilité d'une vue, utilisezthis.context.options._metadata.visibility.get("value");
- Pour obtenir les options prédéfinies d'une vue, utilisez
this.context.options._metadata.*
. Par exemple, pour définir l'option de visibilité d'une vue, utilisezthis.context.options._metadata.visibility.set("value", newValue);
- Pour obtenir une option de configuration définie par l'utilisateur, utilisez
this.context.options.myOption.get("value");
, oùmyOption
est le nom d'option. - Pour définir une option de configuration définie par l'utilisateur, utilisez
this.context.options.myOption.set("value", newValue);
, oùmyOption
est le nom de l'option.
Pour sérialiser l'objet de liaison de données à une chaîne JSON, vous pouvez appeler la fonction toJson()
sur l'objet de liaison de données. Pour obtenir un objet JavaScript de base qui représente la liaison de données, vous pouvez appeler
toJSObject()
.