2013-11-15 53 views
0

我試圖在Tapestry 5.3.7中使用Stitch onEvent mixin

下面是從那裏的OnEvent的javascript:

T5.extendInitializers({ 
    onEvent: function (spec) { 
     var element = $(spec.id).observe(spec.event, function() { 
     var params = {}; 
     if (spec.fieldIds) { 
      for (var i = 0; i < spec.fieldIds.length; ++i) { 
       var fieldId = spec.fieldIds[i]; 
       var paramName = "onEvent." + fieldId; 
       var paramValue = $(fieldId).getValue(); 
       params[paramName] = paramValue; 
      } 
     } 
     var zoneManager = Tapestry.findZoneManagerForZone(spec.zone); 
     zoneManager.updateFromURL(spec.url, params); 
     }); 
    } 
}); 

我用它在我的TML這樣的:

<t:form t:id="filterTextForm"> 
    <div style="float:right"> 
     <input id="filterText" t:id="filterText" t:type="textfield" 
      t:value="filter" zone="configZone" t:autofocus="literal:true" onClick="this.select()" t:mixins="onEvent" event="keyup"/> 
    </div> 
</t:form> 

和我的事件方法是這樣的:

void onKeyupFromFilterText(String filter) { 
    this.filter = filter; 

    if (request.isXHR()) { 
     ajaxResponseRenderer.addRender(configZone).addRender(descZone); 
    } 
} 

當我有t:mixins="onEvent" event="keyup",頁面上沒有任何區域正在更新,不生成AJAX請求。

當我刪除它時,除了我試圖做的部分,我的問題中描述的一切都正常。

我使用的是Tapestry 5.3.7。

回答

1

observe()是一個prototype函數。我猜你正在使用tapestry-jquery這是一個第三方庫,它刪除原型並用jquery替換原型。

你需要適應的JavaScript使用jQuery的工作(如觀察()需要改變on()

您可能會發現JS破過的其他位(例如我不知道如果tapestry- jquery的ZoneManager與核心tapestry完全一樣)。

tapestry-jquery自帶內置bind mixin,它的作用類似onevent。您可能會發現使用該mixin就足夠了。

+0

是的,有一次我嘗試切換到jQuery。你說它刪除了原型。有沒有辦法完全擺脫jQuery並返回到原型? – Lopina

+1

假設您使用maven構建,請從pom.xml中刪除tapestry-jquery依賴項,並執行乾淨的構建/部署 –

+0

恐怕沒有用。我從pom.xml中刪除了對jquery的所有引用,並進行了乾淨的安裝,但仍無濟於事。 當我在Firefox調試控制檯中檢查它時,我仍然看到對jQuery的調用,即使我看不到如何。 – Lopina