在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
的函数。我认为框架应该在内部使用它来避免这个问题。但事实并非如此!
此外,我没有找到任何方法来调用和使用此方法。
答案 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;
});