【问题标题】:Javascript error: $(...).observe is not a functionJavascript 错误:$(...).observe 不是函数
【发布时间】:2013-11-15 13:39:36
【问题描述】:

我正在尝试在 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。

【问题讨论】:

    标签: javascript ajax jquery-events tapestry onkeyup


    【解决方案1】:

    observe() 是一个prototype 函数。我猜你正在使用tapestry-jquery,这是一个删除原型并将其替换为 jquery 的第三方库。

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

    您可能会发现其他 js 部分也损坏了(例如,我不确定 Tapestry-jquery 的 ZoneManager 是否与核心 Tapestry 完全相同)。

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

    【讨论】:

    • 是的,有一次我确实尝试过切换到 jQuery。你说它删除了原型。有没有办法完全摆脱 jQuery 并回到 Prototype?
    • 假设您正在使用 maven 构建,请从 pom.xml 中删除tapestry-jquery 依赖项并进行干净的构建/部署
    • 从命令行运行mvn dependency:tree。也许您的其他依赖项之一是将tapestry-jquery 作为transitive dependency 引入
    • 我认为您正在对 Glassfish 进行肮脏的部署。尝试搜索 glassfish 目录tapestry-jquery*.jar
    • 您显然是在进行脏部署而不是干净部署。您需要有一个可以(定期)进行完全干净部署的流程。
    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 2015-06-27
    • 2011-06-20
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多