1

我正在尝试从我的 gsp 调用一个 extjs 函数,基本上该函数在 deleteFiling.js 中,我在 gsp 标头中引用它

<g:javascript src="deleteConfirm.js"></g:javascript>

和 deleteConfirm.js:

Ext.onReady(function(){

Ext.BLANK_IMAGE_URL = appContextRoot
+ '/js/extjs/resources/images/default/s.gif';
var theme = appContextRoot
+ "/js/extjs/resources/css/xtheme-gray.css";
Ext.util.CSS.swapStyleSheet("theme", theme)

Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';

function confirmFiling(){
    Ext.MessageBox.show({
        title:'Commit Confirmation',
        msg: 'You are about to <strong>Delete</strong> the entire <strong>Filing</strong>. This \n action cannot be reversed. \n\nAre you sure you want to Proceed',
        buttons: Ext.MessageBox.YESNO,
        fn: processDelete,
        icon: Ext.MessageBox.QUESTION
    });
}})

我正在调用 confirmFiling 函数,如下所示:

<g:link action="deleteFiling" id="${filingInstance.id}" onclick="confirmFiling()"> <img src="${resource(dir:'images',file:'trash.gif')}" title="Delete" />

我不断收到功能未定义。我知道我可以在没有 extjs 的情况下做到这一点,但我的问题是如何从 html 或 gsp 文件调用 extjs 函数。

谢谢

4

1 回答 1

0

您的代码将 confirmFiling 函数定义为您传递给 Ext.onReady 的匿名函数的本地属性。

但是,您的 onclick 事件正在尝试调用它希望在全局范围内找到的 confirmFiling 函数(与窗口范围相同)。

如果这是您的全部代码,并且您将不再使用 Ext 编写函数、模块或其他组件,那么您可以创建一个全局变量并将其设置为等于 confirmFiling 函数,如下所示:

myGlobalVar = function confirmFiling(){...}

然后可以从您的 onclick 事件处理程序访问 myGlobalVar。请注意,没有var声明全局变量。如果你把它放在var它前面,那么它就变成了一个本地的。

另一种(更好的)方法是定义一个命名空间并在该命名空间内创建您的函数。这是一个示例:http ://docs.sencha.com/ext-js/3-4/#!/api/ Ext-method-ns 顺便说一句,我假设您使用的是 ExtJS 3x。在命名空间中定义函数后,您可以通过事件处理程序中的命名空间调用它。

于 2013-03-13T22:43:22.183 回答