0

我正在为我们应用程序的许多部分使用自定义事件处理程序。Tim Tripcony在他的博客中描述了这一点......他很可能(希望)回答这个......

我的代码中的事件处理程序如下所示:

    <xp:eventHandler
        id="newbsDoSomething"
        submit="true"
        event="calledbyid"
        refreshMode="complete">
        <xp:this.action>
            <![CDATA[#{javascript:doSomethingFromSomewhere();}]]>
        </xp:this.action>
    </xp:eventHandler>

按钮或其他控件使用如下代码执行这些事件:

XSP.partialRefreshPost(("#{id:newbsDoSomething}", {
    params : {
        '$$xspsubmitvalue' : 'something that tells it what to do.'
    },
    onError : function(err) {
            alert('Whatever this method is doing got an error...');
            //I want to report the error here
    },
    onComplete : function() {
        // maybe do something else
    })
});

当我犯了一个错误(一次在蓝月亮)并且对 AJAX 请求的响应包含堆栈跟踪时。我想放置一个按钮,可以选择在另一个页面中呈现堆栈跟踪。

在 onError 方法中,错误未定义,因此无济于事。我没有看到包含响应的 XSP 对象的属性。我可以在 Firebug 控制台中看到响应,但我该如何务实地得到它呢?

/新人

4

1 回答 1

4

问题是 CSJS 函数XSP ._ partialRefresh检查onError参数是否为函数。如果它是一个函数,则在没有所需参数的情况下调用它。

但是,如果您改用字符串,则会对其进行eval,因此可以执行以下操作:

function myErrHandler(){
    // just do some debugging
    // of ioArgs object 
    var arg = arguments[1];
    var txt = "";
    for( p in arg ){
        txt += p + " -> " + arg[p] + " [" + typeof( arg[p] ) + "]\n";
    }
    alert( txt );
}

XSP.partialRefreshPost("#{id:newbsDoSomething}", {
    onError : 'myErrHandler( arguments[0], arguments[1] )'
});

希望这可以帮助

斯文

于 2012-07-10T10:59:55.620 回答