Struts 2 jQuery Subscribe不止一次被调用

时间:2013-12-07 12:07:00

标签: jquery struts2 struts2-jquery

在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的函数。我认为框架应该在内部使用它来避免这个问题。但事实并非如此!

此外,我没有找到任何方法来调用和使用此方法。

4 个答案:

答案 0 :(得分:2)

  

每次重新加载页面时都会调用subscribe并输入代码   订阅再次运行。

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

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

希望如此清除你的怀疑。

答案 1 :(得分:2)

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的完整代码

答案 2 :(得分:1)

我对 onEditInlineSuccessTopics 和更换

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

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

是最适合我的解决方案。

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

答案 3 :(得分:1)

只需使用return false;在功能结束时。

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