1

struts 2 jQuery プラグインにはpublish/subscribeフレームワークが組み込まれています。

独自のパブリッシュおよびサブスクライブ イベントを (グリッドなどで) 定義すると、イベントがパブリッシュされるたびに、サブスクライブされた関数が呼び出されます。詳細については、( Struts 2 jQuery Subscribe が複数回呼び出される)を参照してください。

これを防ぐために、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

4

2 に答える 2

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" >
于 2014-05-17T14:28:19.490 に答える