liferay - <aui :script> block内的"A is not defined"

标签 liferay liferay-6 alloy-ui

我正在尝试扩展现有Liferay Portlet的某些功能。作为其中的一部分,我想使用Alloy UI来修改portlet中字段的值。有一个预先存在的<aui:script>块,我想在其中定义我的自定义函数。我继续尝试使用A.one('element'),但是收到了错误“未定义A”。 A.one()在同一.jsp文件中的其他位置使用,尽管未在<aui:script>块中使用,但其功能正常。

我尝试了Google搜索这个问题,但没有成功。我尝试过的一种解决方案是在元素块中包含“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>

最佳答案

<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) {});,它将在旧的浏览器中运行。

关于liferay - <aui :script> block内的"A is not defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456185/

相关文章:

jquery - 使用 AlloyUI 向下滚动时添加类

java - 如何从 Portlet 导航到 Portlet

java - 我想通过 Liferay 在 portlet 内添加一个评论框

liferay - Bootstrap 模式不适用于 Liferay 中的下拉菜单

java - liferay spring portal @ResourceMapping 无法触发不同类型的http方法

当 a 不具有特定角色时,Liferay 更改默认重定向页面

java - 如何在 Liferay 中提取嵌套的 JSON 元素

java - Liferay 和注册确认页面

exception - Liferay 6 使用 Common Service Builder 层错误 - BeanLocatorException - 尚未设置 BeanLocator