帮助在Tapestry5中创建JavaScript mixin?

时间:2010-05-10 16:48:01

标签: java javascript tapestry mixins

我正在创建一个mixin,当文本字段获得焦点时,它会呈现一个javascript文件。

我对Tapestry中mixins的想法不熟悉,我不确定在文本字段获得焦点时我希望在哪里放置我原来的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文件中?如果是的话究竟应该去哪儿?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

该方法可以在mixin.js中自由浮动但是名称类似于init,您可能会发生冲突。您可以将它放在JSDasher类本身或将主体移动到onFocus函数。您还可以在JSDasher类上定义任何其他函数,并使用this.function_name调用它们。以Tapestry源代码中的datefield.js为例。