2010-05-10 60 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