2016-07-28 31 views
0

Ich versuche, eine Stop-Taste in meiner Webapp zu erstellen. Die Webanwendung erstellt Massenverknüpfungen zu verschiedenen Dateien. Ich habe versucht, mit $.connection.shortcutHub.stop() aber dies kommt mit einem Fehler, der Cannot read property 'shortcutHub' of undefined(anonymous function)Signaler Schließen Verbindung

kommt mit dem Code ist unten. Ich brauche die Verbindung, die gestoppt wird, sobald die Schaltfläche stop geklickt wurde. Die ID der Stopp-Schaltfläche lautet stopButton.

 $(document).ready(function() { 
     // initialize the connection to the server 
     var progressNotifier = $.connection.shortcutHub; 

     // client-side sendMessage function that will be called from the server-side 
     progressNotifier.client.sendMessage = function (message, percent) { 
      // update progress 
      UpdateMessage(message, percent); 
     }; 

     progressNotifier.client.redo = function() { 
      redo(); 
     }; 

     progressNotifier.client.success = function() { 
      success(); 
     }; 

     progressNotifier.client.fail = function() { 
      fail(); 
     }; 


     // establish the connection to the server and start server-side operation 
     $.connection.hub.start().done(function() { 
      $('#confirmbutton').click(function() { 
       jQuery.noConflict(); 
       document.getElementById('closeButton').setAttribute("class", "btn btn-default hidden"); 
       $('#myModal').modal('show'); 
       //document.getElementById('confirmbutton').disabled = true; 
       //document.getElementById('barcodepanel').setAttribute("class", "panel panel-default"); 
       var ticket = getCookie('ticket'); 
       var path = getCookie('CBSShortcut_Path'); 
       var checkeddocs = getCheckedBoxes("dcheck"); 
       var checkedfolders = getCheckedBoxes("fcheck"); 
       progressNotifier.server.createshortcuts(ticket, path, checkeddocs, checkedfolders); 
      }); 

      $('#stopButton').click(function() { 
       document.getElementById('closeButton').setAttribute("class", "btn btn-default"); 
       document.getElementById('confirmbutton').disabled = false; 


       //What do I put here? 
      }); 



     }); 



     function UpdateMessage(message, percent) { 
      // get result div 
      var msg = $("#result"); 
      // set message 
      msg.html(message); 
      //set value of progress bar 
      document.getElementById('closeButton').setAttribute("class", "btn btn-default hidden") 
      $('#progressbar').css('width', percent + '%').attr('aria-valuenow', percent); 
     } 

     function getCookie(cname) { 
      var name = cname + "="; 
      var ca = document.cookie.split(';'); 
      for (var i = 0; i < ca.length; i++) { 
       var c = ca[i]; 
       while (c.charAt(0) == ' ') c = c.substring(1); 
       if (c.indexOf(name) == 0) return c.substring(name.length, c.length); 
      } 
      return ""; 
     } 

     function redo() { 
      document.getElementById('confirmbutton').disabled = false; 
      jQuery.noConflict(); 
      $('#myModal').modal('hide'); 
     } 


     // Pass the checkbox name to the function 
     function getCheckedBoxes(chkboxclass) { 
      var checkboxes = document.getElementsByClassName(chkboxclass); 
      var checkboxesChecked = []; 
      var ids = ""; 
      // loop over them all 
      for (var i = 0; i < checkboxes.length; i++) { 
       // And stick the checked ones onto an array... 
       if (checkboxes[i].checked) { 
        checkboxesChecked.push(checkboxes[i]); 
        ids = ids + checkboxes[i].getAttribute("Name") + ","; 
       } 
      } 
      // Return the array if it is non-empty, or null 
      //return checkboxesChecked.length > 0 ? checkboxesChecked : null; 
      return ids; 
     } 
    } 
);` 

Jede Hilfe wird geschätzt. Ich habe alles versucht, was google meinen Weg geworfen hat (das war meistens stackoverflow Seiten) und ich habe immer noch das gleiche Problem.

Antwort

2

Haben Sie versucht:

$.connection.hub.stop().done(function() { 
    alert('stopped'); 
}); 

es funktionieren wird.

+0

Wo würde ich das hinstellen? Ich habe es an einigen Stellen versucht, aber ich bekomme immer den gleichen Fehler. – JohZant

+0

ok .. Wenn du mit dem Verbinden beginnst, behalte die $ .connection in einer Variablen und benutze diese Variable später, um sie wie folgt zu steuern: var ChatConnection = $. Connection; und wenn Sie aufhören wollen, verwenden Sie einfach ChatConnection.stop(); Hinweis: - Bewahren Sie die Variable als global auf. –

+0

Ich habe 'progressNotifier' als globale Variable zugewiesen, die die Verbindung hält. Wenn ich 'progressNotifier.stop(); eintippe, sagt es mir, dass es keine Funktion ist. – JohZant

1

Sie die globale SignalR Hub-Client-Verbindung verwenden mögen, weil Hub eine einzelne Verbindung gemeinsam nutzen (auch bekannt als nicht progressNotifier verwendet etwas mit der Verbindung zu tun, nur zu hören und Ereignisse senden.)

Ihr Code Testen Sie dies könnte wie folgt aussehen:

$('#stopButton').click(function() { 
       document.getElementById('closeButton').setAttribute("class", "btn btn-default"); 
       document.getElementById('confirmbutton').disabled = false; 


       $.connection.hub.stop(); 
       //try to send a server event. Will throw an error 
       //Uncaught Error: SignalR: Connection must be started before data can be sent. Call .start() before .send() 
      }); 
+0

Ich bekomme 'Uncaught TypeError: Kann Eigenschaft 'Hub' von undefined nicht lesen. – JohZant

+0

Wenn Ihr Code an der richtigen Stelle ist, wie in Ihrer Frage, können Sie einen Screenshot mit dem Fehler in der Konsole einfügen? –

+0

http://imgur.com/a/CGlbD - Ich hoffe, dass dies hilft – JohZant