Struts 2的jQuery的订阅称为不止一次(Struts 2 jQuery Subscribe

2019-10-19 02:23发布

在支柱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我认为该框架应在内部使用,以避免此问题。 但它不是!

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

Answer 1:

每次我重装订阅页面时被调用,并再次在订阅运行的代码。

当然,这是标准的行为。 如果你需要的东西,只跑了一次,在整个生命周期中,你可以使用会话/饼干。

onGridCompleteTopics -这意味着每次网格加载的话题发表。 而每次在页面重载/刷新网格被加载,发布该事件。

希望这样它清除您的疑问。



Answer 2:

溶液在被发现的Struts 2的jQuery插件isSubscribe不工作

人们可以使用

  $("#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插件isSubscribe不工作由@Roman下完整的代码



Answer 3:

我有onEditInlineSuccessTopics和更换同样的问题

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

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

是为我工作的最佳解决方案。

有关destroyTopic其他的版本,制作这个专题的工作只是我第一次编辑一行,如果我想编辑另一行,话题并没有被调用。



Answer 4:

只需使用返回false; 在函数的末尾。

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


文章来源: Struts 2 jQuery Subscribe is called more than once