<aui:script>块内的"A未定义"

red*_*sky 10 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>
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试做的大致概述:

<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>
Run Code Online (Sandbox Code Playgroud)

GKl*_*mov 11

<aui:script> 标签输出

AUI().use(function(A) {
}
Run Code Online (Sandbox Code Playgroud)

仅当您通过use属性提供依赖项时.喜欢

<aui:script use="aui-base">
    // your code here
</aui:script>
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你就会拥有

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

结果是.但在这种情况下,您在内部声明的所有函数都不是全局函数.让他们全球通话

Liferay.provide(window, 'functionName', function() {
    // function body
});
Run Code Online (Sandbox Code Playgroud)

<aui:script/>

<aui:script use="aui-base"/>比手动调用更好AUI().use(function(A) {})如果客户端可以具有IE <= 7,这并不正确地工作AUI().use().如果IE 6,7 <aui:script use="aui-base>将输出AUI().ready('aui-base', function(A) {});,将在旧浏览器中工作.