2016-05-04 16 views
1

私はクリックしたときにポストリクエストをトリガーするボタンがあるjiraのクラウドプラグインとしてangular-node.jsアプリケーションを開発しています。私は、この投稿要求がボタンがクリックされた回数と呼ばれる奇妙な問題に直面しています。たとえば、最初にボタンをクリックすると、投稿要求が1回だけ呼び出されます。これは、2回目以降の投稿要求が2回実行されるなどです。ページを更新すると、フォーム0が再び開始されます。ここでは、コードは次のとおり1回のクリックで1回送信をバインドするにはどうすればよいですか?

コントローラコード:

$scope.addActor = function(){ 
    AP.require('dialog', function(dialog){ 
     dialog.create({ 
      key: 'actor-content', 
      width: '40%', 
      height: '30%', 
      chrome: true, 
     }); 
    }); 

    AP.require('events', function(events){ 
     events.on('customEvent', function(){ 
      console.log(arguments[0]); 
      var data = { 
       productName: $scope.productName, 
       checked: false, 
       actor: arguments[0] 
      }; 

      $http.post('/addActor', data) 
       .success(function(data){ 
        $scope.actors = []; 

        for (var actor in data){ 

         console.log(data[actor].checked) 
         console.log(data[actor].actor) 

         $scope.actors.push({ 
          checked : data[actor].checked, 
          id : data[actor].actor 
         }); 
        } 

        AP.require("messages", function(messages){ 
         //create a message 
         var message = messages.success('','Actor added'); 
         setTimeout(function(){ 
          messages.clear(message); 
         }, 2000); 
        }); 


        /*$scope.formData = {};*/ 

       }).error(function(data){ 
        AP.require("messages", function(messages){ 
         //create a message 
         var message = messages.error('','Error in Adding Actor'); 
         setTimeout(function(){ 
          messages.clear(message); 
         }, 2000); 
        }); 
       }); 
     }); 
    }); 

}; 

dialogActor.hbs

<body style="background:white"> 

     <div class="aui-dialog2-content"> 
      <script> 


       $(document).one('click', function(e) { 
        // initialization here 

        AP.require('dialog', function(dialog) { 
         dialog.getButton('submit').bind(function() { 

          AP.require('events', function(events){ 
           var actor = $('#actor').val(); 
           events.emit('customEvent', actor); 
          }); 

          dialog.close(); 
         }); 
         dialog.getButton('cancel').bind(function() { 
          dialog.close(); 
         }); 
        }); 
       }); 

      </script> 

      <form class="aui" action="#" name="jiraform" id="actorform"> 


       <div class="content"> 
        <div class="field-group"> 

         <label for="summary">Actor<span class="aui-icon icon-required">Required</span></label> 
         <input type="text" value="" name="actor" id="actor" class="text long-field" data-aui-validation-field data-aui-validation-required="required" required> 
         <span class="actorError" style="color: #880000"></span> 

        </div> 

       </div> 
      </form> 

     </div> 

</body> 
+0

リクエストがネットワークタブまたはconsole.log()から何度も送信されていることを確認していますか? – Saubar

答えて

0

AP.require('events', function(events){ 
     events.on('customEvent', function(){ 
    }) 
}) 


AP.require('events', function(events){ 
      events.once('customEvent', function(){ 
     }) 
    }) 

からの変更の問題を解決しました。これは、イベントが一度発生していることを確認します。

関連する問題