【问题标题】:Struts 2 jQuery Subscribe is called more than onceStruts 2 jQuery 订阅被多次调用
【发布时间】:2013-12-24 19:46:56
【问题描述】:

在 struts 2 jQuery 插件中有一个发布/订阅框架,可用于事件调用。

考虑这个示例....

也可以通过订阅onGridCompleteTopics事件来改变加载网格时的网格行为

<sjg:grid id="gridtable" dataType="json"
    href="%{url}" gridModel="gridModel" direction="%{pageDir}" width="800"
    shrinkToFit="true" onGridCompleteTopics="grid_compelete">

然后在js中:

    $.subscribe('grid_compelete', function(event, data) {
    //do some thing
}

问题是,如上 js 和网格在同一个页面中(它们在一个 jsp 中),每次我重新加载页面时都会调用 subscribe 并且订阅中的代码会再次运行。

我该如何预防?!我在jquery.subscribe.1.2.3 中找到了一个名为isSubscribed 的函数,我认为框架应该在内部使用它来避免这个问题。但事实并非如此!

我也没有找到任何方法来调用和使用这个方法。

【问题讨论】:

    标签: jquery struts2 struts2-jquery


    【解决方案1】:

    只需使用 return false;在函数结束时。

    $.subscribe('grid_compelete', function(event, data) {
        return false;
    });
    

    【讨论】:

      【解决方案2】:

      我对 onEditInlineSuccessTopics 和替换

      有同样的问题
      $.subscribe('grid_compelete', function(event, data) {
      

      $("#gridtable").subscribe('grid_compelete', function(event, data) {
      //do some thing
      }
      

      是最适合我的解决方案。

      与destroyTopic相关的另一个版本,使主题仅在我第一次编辑一行时起作用,如果我想编辑另一行,则根本没有调用该主题。

      【讨论】:

        【解决方案3】:

        Struts 2 jQuery plugin isSubscribe not working找到了解决方案

        可以使用

          $("#gridtable").subscribe('grid_compelete', function(event, data) {
            //do some thing
        }
        

        或者干掉这个话题(我自己不喜欢这个话题)

         $.subscribe('grid_compelete', function(event, data) {
            //do some thing
            $.destroyTopic('grid_compelete');
        }
        

        isSubscibe 仍然存在,它附加到文档中,请参阅Struts 2 jQuery plugin isSubscribe not working@Roman C 的完整代码

        【讨论】:

          【解决方案4】:

          每次我重新加载页面时都会调用订阅和代码 订阅再次运行。

          当然,这是标准行为。如果您只需要运行一次,在整个生命周期中,您可以使用 session/cookies。

          onGridCompleteTopics - 这意味着每次网格加载时都会发布主题。每次重新加载/刷新页面时,都会加载网格,发布事件。

          希望它能消除你的疑虑。

          【讨论】:

          • 谢谢。怎样才能知道这个话题的订阅是否已经完成!
          • 按照我的建议,您可以使用 cookie。从 cookie 中获取一个变量,如果没有找到,运行你的代码并将 var 保存在 cookie 中。
          猜你喜欢
          • 2018-10-01
          • 1970-01-01
          • 2018-09-07
          • 2018-03-16
          • 2019-02-12
          • 2019-03-25
          • 2012-12-13
          • 2015-09-24
          • 1970-01-01
          相关资源
          最近更新 更多