【问题标题】:Struts 2 jQuery plugin isSubscribe not workingStruts 2 jQuery 插件 isSubscribe 不起作用
【发布时间】:2014-05-17 07:00:05
【问题描述】:

struts 2 jQuery 插件有一个内置的publish/subscribe 框架。

如果您定义自己的发布和订阅事件(例如在网格上),则每次发布事件时都会调用订阅函数。详情请见(Struts 2 jQuery Subscribe is called more than once)

为了防止这种情况,可以使用isSubscribed 方法。

对于网格为:

<sjg:grid id="gridtable" 
        onBeforeTopics="before_grid_load" >

JS 将是:

$.subscribe('before_grid_load', function(event, data) {     

    if ( $('#gridtable').isSubscribed('before_grid_load') ){
      return ;    
    }
//go on with function
}

问题是$('#gridtable').isSubscribed('before_grid_load') 每次都返回false

【问题讨论】:

    标签: java jsp struts2 struts2-jquery struts2-jquery-grid


    【解决方案1】:

    函数isSubscribed 应用于元素$('#gridtable'),但订阅了$(document)。我已经用最后一个元素进行了测试,但它对我不起作用。但是尝试使用第一个元素并且它起作用了。

    脚本:

    <head>
      <link href="<s:url value="/css/template_styles.css"/>" type="text/css" rel="stylesheet">
      <sj:head />
      <title>jQuery Grid</title>
      <script type="text/javascript">
        $(document).ready(function(){
        console.log("Before subscribe");
        $("#gridtable").subscribe("beforeTopic", function(topic, data) {
          console.log('Topic: '+data, topic);
          if ( $("#gridtable").isSubscribed("beforeTopic") ){
            console.log('Subscribed: '+data, topic);
            return;
          }
          //go on with function
          console.log('Not subscribed: '+data, topic);
        });
        console.log("After subscribe");
        });
        </script>
    </head>
    

    对于网格:

    <sjg:grid id="gridtable" 
            onBeforeTopics="beforeTopic" >
    

    【讨论】:

    • 谢谢!请注意:当beforeTopic 发布时,$("#gridtable").subscribe("beforeTopic..." 将只被调用一次,而$.subscribe("beforeTopic...." 将在每个发布该事件的网格中被调用。所以有了这个解决方案,就不需要再打电话给isSubscribed了。
    • 一般来说,你可以在任何其他地方调用isSubscribed,而不是在主题处理程序中,正如你所提到的那样它是无用的,所以要确保一个元素是否订阅了主题,你可以检查那个元素。
    • 另一种解决方案可以在:stackoverflow.com/questions/20441178/…订阅结束时return false找到
    【解决方案2】:

    检查你的库到你的jsp

    <%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags"%>
    

    在你的 Head 标签中启用 jQuery Grid 插件

     <sj:head jqueryui="true" jquerytheme="redmond" />
    

    【讨论】:

    • 你能说得更直白一点吗?
    • 网格正在工作!已发布事件中的 isSubscribed 方法总是返回 false
    • @AlirezaFattahi 这不是一个方法,而是一个函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多