10

既存の Liferay ポートレットの機能を拡張しようとしています。その一環として、Alloy UI を使用してポートレットのフィールドの値を変更したいと考えています。<aui:script>カスタム関数を定義したい既存のブロックがあります。先に進んで を使​​用しようとしA.one('element')ましたが、「A が定義されていません」というエラーが表示されます。 ブロック A.one()内ではなく、同じ .jsp ファイル内の別の場所で使用されており、期待どおりに機能します。<aui:script>

この問題をグーグルで試してみましたが、役に立ちませんでした。私が試した解決策の 1 つは、要素ブロックに「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"/>、手動で呼び出すよりも優れています。IE 6,7 の場合、古いブラウザで動作するように出力されます。AUI().use(function(A) {})AUI().use()<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 に答える