10

我正在尝试扩展现有 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>
4

2 回答 2

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 <= 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) {});在旧浏览器中工作。

于 2013-07-04T08:02:51.567 回答
0

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

How do you create a sandbox?

Simple:

AUI().use(function(A) {
   // Your code goes here  
});
于 2013-07-04T07:32:26.957 回答