2013-07-03 6 views
8

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

私はこの問題をグーグルでは役に立たなかった。私が試した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> 
+1

「AUI」についてよく分かりませんが、「document.getElementsByName( "title")[0] .value "要素値を取得することができます。 –

答えて

7

<aui:script>タグ出力

AUI().use(function(A) { 
} 

:特に、ポストの先頭から次の抜粋は、あなたの直接的な質問に答えます。その場合と同様に

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

<aui:script use="aui-base"/>は、クライアントがAUI().use()で正常に動作しない= 7 IE <を持つことができる場合は、手動でAUI().use(function(A) {})を呼び出すよりも優れている内部。 IE 6,7 <aui:script use="aui-base>の場合は、古いブラウザで動作するAUI().ready('aui-base', function(A) {});を出力します。

+0

すばらしく詳細な答え! – jbalsas

+0

私はこれをまだテストしていませんが、これは私の問題を正確に修正するように思えます。本当にありがとう! –

0

blog post hereはに良い紹介しますAUI。あなたはuse属性を経由して依存関係を提供する場合にのみ

How do you create a sandbox? 

Simple: 

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

私はタグが私のためにサンドボックスを設定したと仮定しました。また、 "A"は、明示的に 'AUI()。use'を呼び出さなくても、同じファイル内の他の場所で参照され、期待どおりに動作します。 –

関連する問題