0

J'ai une situation complexe impliquant plusieurs instances de quelques modules différents. Par exemple, j'ai un module d'entrée, un module de formulaire et un module formSelector. La sélection d'un formulaire sur le formulaireSelector doit remplir le formulaire avec les entrées correctes. Au-dessus de la formeSelector, j'ai une autre forme avec diverses entrées.Est-ce que Durandal a une façon native de déclencher un événement sur une instance spécifique d'un module?

Toutes les entrées sont construites en fonction de ce qui est renvoyé par la base de données.

Maintenant, j'ai essayé d'utiliser pub/sub pour déclencher un événement pour passer l'objet de formulaire du formSelector au module de formulaire. Cela fonctionne accepter que le déclencheur n'est pas spécifique à l'instance de module de formulaire. Il déclenche l'événement pour tous les formulaires de la page.

Comment puis-je déclencher un événement uniquement pour l'instance de formulaire spécifique?

Exemple

Note: J'ai fait ce sur place juste pour une référence pour la structure. Ce code ne fonctionne probablement pas. De plus, je ne pense pas que le javascript soit nécessaire pour répondre à la question.

Entrée: Observe certaines données

<input data-bind="value: input.data" /> 

Forme: Liste des modules d'entrée

<form> 
    <div data-bind="foreach: form.inputs"> 
     <div data-bind="compose: { model: input.modelPath, activationData: input.activationData }"></div> 
    </div> 
</form> 

FormSelector: Sélectionnez la forme désirée

//List of buttons to select the desired form 
<div data-bind="foreach: forms"> 
    <div data-bind="click: updateForm"></div> 
</div> 
//The desired Form (Module) 
<div data-bind="compose: { model: form.modelPath, activationData: form.activationData }"></div> 

Index.html

//Form Module 
<div data-bind="compose: { model: mainForm.modelPath, activationData: mainForm.activationData }"></div> 
//FormSelector Module 
<div data-bind="compose: { model: formSelector.modelPath, activationData: formSelector.activationData }"></div> 

En utilisant l'exemple, je veux déclencher un événement, à l'intérieur updateForm, qui se déclenchera uniquement pour le formulaire composé à l'intérieur du FormSelector. Le problème est, les déclencheurs larges de l'application mettra à jour le formulaire ci-dessus (le mainForm).

Répondre

0

Durandal a câblé des événements par défaut sur l'application classe, de sorte que vous pouvez utiliser le app.trigger et et app.on fonctions à l'échelle mondiale. Toutefois, vous pouvez câbler votre propre objet en utilisant la fonction Events.includeIn (obj).

Pour plus d'informations, visitez le documentation.