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
!
答案 0 :(得分:2)
函数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" >
答案 1 :(得分:0)
检查你的lib到你的jsp
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags"%>
在头标记中启用jQuery Grid插件
<sj:head jqueryui="true" jquerytheme="redmond" />