2010-05-10 68 views
2

我正在创建一个mixin,当文本字段获得焦点时呈现JavaScript文件。帮助在Tapestry5中创建JavaScript混搭?

我是新来的挂毯混入的想法,而且我不确定该在何处,我希望当文本框获得焦点跑我原来的JavaScript文件。

以下是我的代码示例: Java的混合类:

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混入文件:我的JavaScript文件的

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

一部分,我希望为运行时的文本框收益重点:

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文件是更大的塔上面的n,我的问题是我应该把我的JavaScript代码放在上面?

它应该全部包含在mixin.js文件?如果是的话,究竟应该去哪里?

在此先感谢您的帮助。

回答

1

的方法是确定的自由浮动在mixin.js但使用类似init的名字,你可能有冲突。您可以将其放入JSDasher类本身或将其移动到onFocus函数。您也可以在JSDasher类中定义任何其他函数,并使用this.function_name调用它们。以Tapestry源代码中的datefield.js为例。

+0

感谢您的回复。我仍然有点不清楚,也许我没有正确地说出我的问题。我知道把mixin.js文件放在哪里,我只是不确定是否应该从mixin.js文件中分离出我的原始js代码。如果是这样,我怎么能从我原来的js代码调用init()方法。它应该包含在mixin.js中吗? 我希望这是有道理的。再次感谢。 – shane87 2010-05-10 19:55:52

+0

我更新了答案,因为我误解了这个问题。 – 2010-05-11 05:42:27

+0

再次感谢..再一个问题。 是否可以从mixin.js文件中调用另一个JavaScript文件的方法。我的JavaScript文件非常大,并将请求发送到另一台服务器上运行的php套接字。所以我需要将我的javascript代码与php套接字一起保存在其他服务器的根目录中。即我需要保持mixin.js代码与其他JavaScript代码分离。 我想要做的是以某种方式挂钩onfocus事件中的外部JavaScript代码。 这里的任何帮助都会很棒。 – shane87 2010-05-11 21:51:41