2

テキストフィールドがフォーカスされたときに JavaScript ファイルをレンダリングする mixin を作成しています。

タペストリーのミックスインのアイデアは初めてで、テキストフィールドがフォーカスされたときに実行したい元の JavaScript ファイルをどこに配置すればよいかわかりません。

以下は私のコードの例です: Java mixin クラス:

package asc.mixins;

import org.apache.tapestry5.RenderSupport;
import org.apache.tapestry5.annotations.AfterRender;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.IncludeJavaScriptLibrary;
import org.apache.tapestry5.annotations.InjectContainer;
import org.apache.tapestry5.corelib.base.AbstractTextField;

@IncludeJavaScriptLibrary("js_dasher_mixin.js")
public class DasherMixin {

@Environmental
private RenderSupport renderSupport;

@InjectContainer
private AbstractTextField field;

@AfterRender
void addScript() {
    this.renderSupport.addScript("new JSDasher('%s');", 
            this.field.getClientId());
 }


}

Javascript mixin ファイル:

JSDasher = Class.create({

initialize: function(textField) 
{
    this.textField = $(textField);

    this.textField.observe('focus', this.onFocus.bindAsEventListener(this));
},

onFocus: function(event)
{
    //call my javascript init() function
} 
}

テキストフィールドがフォーカスを得たときに実行したい私のJavaScriptファイルの一部:

var posX, posY;


// Sets up our global variables and dispatches an init request to the server.
function init() {

posX=0;
posY=0;
canvas = document.getElementById("canvas"); 
canvasWidth = canvas.offsetWidth;
canvasHeight = canvas.offsetHeight;
if (canvas.getContext) {   
    ctx = canvas.getContext("2d");
}

canvas.onclick = canvasClicked;
canvas.onmousemove = mouseMoved; 

canvasOffsetX = findPosX(canvas);
canvasOffsetY = findPosY(canvas);

sessID = -1;

sendInitRQ(canvasWidth, canvasHeight);

}

私の JavaScript ファイルは上記よりもはるかに大きいです。私の質問は、上記の JavaScript コードをどこに置くべきかということです。

すべて mixin.js ファイルに含める必要がありますか? もしそうなら、それは正確にどこに行くべきですか?

助けてくれてありがとう。

4

1 に答える 1

1

メソッドは mixin.js でフリー フローティングで問題ありませんが、init のような名前を使用すると、競合が発生する可能性があります。JSDasher クラス自体に配置するか、本体を onFocus 関数に移動できます。JSDasher クラスで他の関数を定義して、this.function_name で呼び出すこともできます。例として、Tapestry ソースの datefield.js を見てください。

于 2010-05-10T18:24:35.720 に答える