在 <aui:script> 块内出现了 "A 未定义"。

10

我正在尝试扩展现有Liferay portlet的某些功能。作为其中的一部分,我想使用Alloy UI来修改portlet中的字段值。在一个预先存在的<aui:script>代码块中,我想定义我的自定义函数。我尝试使用A.one('element'),但是出现了错误"A未定义"。虽然在同一个.jsp文件中,但不在块中,A.one()被用于其他地方,并且按预期运行。

我尝试通过搜索引擎解决这个问题,但没有成功。我尝试的一个解决方法是在元素块中包含"use"语句,但是当从jsp调用该块中的所有函数时,它们都变成未定义的。

我所说的"use"语句是指:

<aui:script use="aui-node,aui-base">
    // ... script
</aui:script>

这是我尝试做的大概草图:

<aui:script>
    function save(){
        // This is where I'm getting the 'A is not defined' error.
        var titleNode = A.one('input[name=title]');

        if (titleNode) {
            // do stuff with titleNode
            var titleVal = titleNode.val();
            var titleSubstr = titleVal.substring(0, titleSubstr.lastIndexOf('/'));
            titleNode.val(titleSubstr);
        }

        // other save-related code here
    }

    function otherFunction() {
        // some other functionality
    }
</aui:script>

1
我不太了解"AUI",但是你仍然可以使用"document.getElementsByName("title")[0].value"来获取元素的值。 - Laxman Rana
2个回答

10
`` 标签输出。
AUI().use(function(A) {
}

只有通过use属性提供依赖项才能实现。例如:

<aui:script use="aui-base">
    // your code here
</aui:script>

如果您这样做,您将拥有

<script type="text/javascript">
    AUI().use('aui-base', function(A) {
        // your code here
    }
</script>

因此,但在这种情况下,您在内部声明的所有函数都不会成为全局函数。要使它们成为全局函数,请调用

Liferay.provide(window, 'functionName', function() {
    // function body
});

<aui:script/> 内部

如果客户端可能有IE <= 7,那么 <aui:script use="aui-base"/> 比手动调用 AUI().use(function(A) {}) 更好,因为它不能正确地与 AUI().use() 一起使用。在IE 6,7的情况下,<aui:script use="aui-base> 将输出 AUI().ready('aui-base', function(A) {});,这将在旧版本浏览器中工作。


1
非常好的且详细的回答! - jbalsas
我还没有测试过这个,但听起来它会完美地解决我的问题。非常感谢! - red_sky
此外,<aui:script use="aui-base"/>比手动调用AUI().use(function(A) {})更好。 然后JSP比JavaScript更好。 这让我很生气!...两种方法必须是等效的。 - Andres Camilo Sierra Hormiga

0

这篇博客文章很好地介绍了AUI。特别是,文章开头的以下摘录回答了你的直接问题:

How do you create a sandbox?

Simple:

AUI().use(function(A) {
   // Your code goes here  
});

我假设aui:script标签已经为我设置了沙盒。此外,在同一文件中,"A"在没有显式调用AUI().use的情况下被引用...并且它按预期工作。 - red_sky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接