<aui:script>块</aui:script>中的“A未定义”

时间:2013-07-03 19:06:38

标签: liferay liferay-6 alloy-ui

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

我试过谷歌搜索这个问题无济于事。我尝试过的一个解决方案是在元素块中包含“use”语句,但是当从jsp调用时,这使得该块中的所有函数都未定义。

“使用”声明的含义是:

<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>

2 个答案:

答案 0 :(得分:11)

<aui:script>标记输出

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&lt; = 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 :(得分:0)

blog post here给出了AUI的一个很好的介绍。特别是,帖子开头的以下摘录回答了你的直接问题:

How do you create a sandbox?

Simple:

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