如何基于widgetVar在Primefaces组件中查找和/或覆盖JavaScript?

时间:2014-12-18 16:39:27

标签: javascript jsf-2 primefaces

根据这个问题:Multiple file upload with extra inputText我可以通过这种方式使用widgetVar覆盖PrimeFaces元素的JavaScript函数:

PF('fileUpload').jq.fileupload({
    add: function(e, data) {
           ...
         }
    });

现在,我尝试覆盖DataTable中的函数,无法理解如何引用它?而且,PF(')从chrome调试器控制台返回undefined,所以我无法调试它。我怀疑这是范围的问题,但不知道如何解决它。

2 个答案:

答案 0 :(得分:12)

你可以使用原型, 例如,覆盖bindEditEvents看起来像这样

PrimeFaces.widget.DataTable.prototype.bindEditEvents = function() {
  ....
}

答案 1 :(得分:2)

还有更多解决方案。取决于你想要走多远。

就我而言,我打算扩展DataScroller的功能。

尽管回答你的问题已经太迟了,但我希望下面的解决方案有助于其他人:

解决方案#1 (扩展当前方法并添加自己的方法)

PrimeFaces.widget.DataScroller = PrimeFaces.widget.BaseWidget.extend({
    init: function(cfg) {
        this._super(cfg);

        // only for widget with widgetVar="yourWidgetVar"
        if(cfg.widgetVar === 'yourWidgetVar') {
            this.yourCustomMethod();
        }
    },

    yourCustomMethod: function() {
        // do whatever you prefer here
    }
});

解决方案#2 (扩展当前方法)

PF('yourWidgetVar').init = function() {

    // do whatever you prefer here

    // call the generic implementation
    PrimeFaces.widget.DataScroller.prototype.init.call(this);
};