Javascript错误:$(...)。observe不是函数

时间:2013-11-15 13:39:36

标签: javascript ajax javascript-events tapestry onkeyup

我试图在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 个答案:

答案 0 :(得分:1)

observe()是prototype函数。我猜你正在使用tapestry-jquery这是第三方库删除原型并用jquery替换它。

您需要调整javascript以使用jquery(例如observe()需要更改为on()

您可能会发现js的其他位也被破坏(例如,我不确定tapestry-jquery的ZoneManager是否与核心挂毯完全相同)。

tapestry-jquery附带了一个内置bind mixin,它与onevent的工作类似。您可能会发现使用此mixin就足够了。