2011-01-12 4 views
2

Je définis une fonction Javascript dans mon bloc global KRL que je veux appeler lorsque l'utilisateur clique sur un lien. Voici les parties pertinentes du ruleset:Appel d'une fonction javascript définie dans KRL depuis l'extérieur d'une fermeture KRL

global { 
    emit <| 
    function clear_hold() { 
     app = KOBJ.get_application("a421x26"); 
     app.raiseEvent("clear_hold"); 
    } 

    |>; 
} 

rule add_link_to_clear_hold { 
    select when pageview ".*" 
    pre { 
    clear_div = << <div id="clear_hold"> 
     <a href="javascript:clear_hold()">Clear Hold</a> 
     </div> >>; 
    } 
    { 
    append("body", clear_div); 
    } 

rule clear_the_hold { 
    select when web clear_hold 
    { 
    replace_html("#clear_link", "<div id='clear_link'>Not on hold</div>"); 
    } 
    always { 
    clear ent:hold; 
    } 
} 

Lorsque je clique sur le lien, je reçois un message d'erreur qui clear_link n'est pas défini.

Que dois-je faire pour appeler ma fonction javascript?

Répondre

5

Il est suggéré d'utiliser la méthode d'espacement nom suivant pour attacher des fonctions JavaScript à l'objet KOBJ pour éviter les conflits avec d'autres applications que l'utilisateur pourrait avoir en cours d'exécution.

KOBJ.a60x33.clear_hold = function() { 
    KOBJ.log('...wohoo! You found me!'); 
} 

La fonction peut alors être appelée avec

KOBJ.a60x33.clear_hold(); 
+2

Je l'ai utilisé cette méthode avant; il fonctionne très bien. –

3

La fonction est définie à l'intérieur de la fermeture KRL, mais j'appelais depuis l'extérieur de la fermeture. Pour le rendre visible à l'extérieur je l'ai ajouté à KOBJ après avoir défini la fonction

KOBJ.clear_hold = clear_hold; 

Puis l'appeler à partir du lien:

href="javascript:KOBJ.clear_hold() 
Questions connexes