2012-06-15 11 views
5

Próbuję przesłonić metodę wewnątrz widgetu jquery. Sposób można znaleźć na linii 122 w https://github.com/got5/tapestry5-jquery/blob/master/src/main/resources/org/got5/tapestry5/jquery/validation.jsMetoda przesłonięcia wewnątrz widgetu jquery

Id lubią zmieniać wyjście HTML na linii 141

Próbowałem dodanie następujących do niestandardowej klasy js bez powodzenia. Jeśli ktokolwiek mógłby wyjaśnić, jak to zrobić, id bardzo to doceni.

(function($) {  
$.widget("ui.tapestryFieldEventManager", { 
    showValidationMessage : function(message) { 
     var field = this.element; 
     var form = field.closest('form'); 

     this.options.validationError = true; 
     form.formEventManager("setValidationError", true); 

     field.addClass("t-error"); 

     this.getLabel() && this.getLabel().addClass("t-error"); 

     var icon = this.getIcon(); 

     if (icon) icon.show(); 
     alert("here"); 
     var id = field.attr('id')+"\\:errorpopup"; 
     if($("#"+id).size()==0) //if the errorpopup isn't on the page yet, we create it 
      field.after("<div id='"+field.attr('id')+":errorpopup' class='tjq-error-popup test'/>"); 
     Tapestry.ErrorPopup.show($("#"+id),"<span>"+message+"</span>"); 

    } 
}); 
})(jQuery); 

Odpowiedz

9

Musisz go zastąpić na prototypie.

var oldMethod = $.ui.tapestryFieldEventManager.prototype.showValidationMessage;  
$.ui.tapestryFieldEventManager.prototype.showValidationMessage = function (message) { 
    // do your stuff here 
    alert("worky"); 

    // apply old method 
    oldMethod.apply(this,arguments); 
}; 

Oczywiście można pominąć zastosowanie starej metody, jeśli nowa metoda robi wszystko, co zrobiła stara metoda.

+0

Mogę być tylko ja, ale nie sądzę, że to podejście działa z jQuery UI 1.9.x. – jokeyrhyme

Powiązane problemy