2014-06-11 3 views
0

Je rencontre un problème lors de la création d'un comportement "depends" où l'objet à dépendre est un tag <option/> qui n'a pas encore été chargé car il est chargé via un appel ajax. Il semble y avoir une condition de concurrence où le comportement dépend essaie de charger avant que l'appel ajax soit terminé. Voici le balisage d'élément qui ne pas charger le comportement dépend:QBO V3 Comportement ordre des opérations

<div class="control-group" data-behavior="Depend" data-depend-options="{{'depends': 'W9', 'required': true}}"> 

« W9 » sera l'ID de la balise <option/>. Cette balise option sera chargée par le code suivant:

<select name="ProfessionalLicenseType" id="ProfessionalLicenseType" class="required" data-behavior="Dropdown" data-dropdown-options="{{ 'type': 'ObjectType', 'data': {{ 'Object': 'ProfessionalLicense' }}, 'selected': '{AttachmentType}', 'id': 'ObjectType' }}"> 

Dois-je pas utiliser le balisage HTML pour créer le comportement de dépendance? Dois-je plutôt essayer d'utiliser javascript pour créer cette dépendance?

Merci d'avance.

Répondre

0

Le soutien du comportement Depend se liant à la valeur d'une balise select, plutôt qu'une balise option:

<div class="control-group" data-behavior="Depend" data-depend-options="{{'depends': 'ProfessionalLicenseType=W9', 'required': true}}"> 

Le comportement Depend, lors de l'initialisation, vérifiera la valeur de ProfessionalLicenseType, et que son vide, la désactivation/masquer votre balise div dépendante. Il va également ajouter un gestionnaire d'événements de changement dans la liste déroulante ProfessionalLicenseType (qbo.Depends.js ligne 45):

source.addEvent('change', qbo3.dependencyCheck.pass([source, element, options, depends])); 

Le comportement sera plus tard Dropdown (de façon asynchrone) charger vos options via AJAX, et si le comportement de options.selected est réglé, va définir la correspondance option.selected = true (qbo.Dropdown.js ligne 105):

if ((row[value] || row) == options.selected) { 
    target.options[target.options.length - 1].selected = true; 
    target.defaultIndex = target.options.length - 1; 
    target.fireEvent('change'); 
} 

le présent travail est le target.fireEvent('change') noté ci-dessus; cela déclenchera le comportement Depend pour réévaluer la dépendance et réagir de manière appropriée.

+0

Merci. Travaillé comme un charme. – GoldRusher49

Questions connexes