2016-08-04 4 views
0

Ich habe eine Funktion, die jquery traggable mit nur start() und stop() implementiert verwendet.

Objekt Wert null außerhalb ziehbar

Ich möchte eine Immobilie INSIDE der stop() setzen und dann abrufen draußen ziehbar so habe ich beschlossen, es so zu Fenster hinzuzufügen:

function dragTimbro() { 
    $scope.documentoTimbrabile = true; 
    angular.element(document.querySelector('#timbroDraggable')) 
       .draggable({ 
        containment: "parent", 
        start: function(event, ui) { 
         $(this).removeClass("draggable"); 
         $(this).addClass("dragging"); 
        }, 
        stop: function(event, ui) { 
         $(this).addClass("draggable"); 
         $(this).removeClass("dragging"); 
         $scope.setPos(ui.position.left, ui.position.top); 
        } 
       });  
}; 

$scope.setPos = function(posX, posY) { 
    $scope.documentoDaTimbrare[$scope.numPag].posX = posX; 
    $scope.documentoDaTimbrare[$scope.numPag].posY = posY; 
} 



Als ich versuche auf das Objekt in der letzten Zeile zuzugreifen, es ist null.
Ich weiß, es ist ein Problem der unterschiedlichen Bereiche, aber ich weiß nicht, wie dieses Problem zu lösen ...

UPDATE: $scope außerhalb ziehbar definiert ist, so dass es nicht innerhalb von stop() zugegriffen werden kann;

enter image description here



UPDATE 2: Ich weiß, ich werde jemand verrückt machen, aber irgendwie habe ich es geschafft, eine Lösung zu finden ...
ich im Grunde eine Funktion außerhalb dragTimbro erstellt haben() und dann ruf es innerhalb von stop an.
Aber ich bekomme nicht, warum Halt sieht eine Funktion, aber kein Objekt ....
Ich habe den Code aktualisiert, um Dinge klarer zu machen

+0

das ist eines der Probleme, aber es ist nicht das wichtigste. Auch ohne das ob das Objekt immernoch null ist;) –

+0

Dann hast du das Element nicht gezogen, oder? – Hydro

+0

aktualisiert die Frage –

Antwort

-1

Die if Klausel wird ausgeführt, bevor das Ereignis eintritt. Setzen Sie in diesem Fall die if-Anweisung in den Block der stop-Funktion.

Die if Anweisung macht in diesem Fall keinen Sinn mehr, also habe ich sie entfernt. Übrigens sind Ihre Identifikatoren sehr lang.

Da das $scope Objekt ist verfügbar, nicht mehr in dem Rahmen der stop Funktion können Sie eine globale Methode oder eine Eigenschaft zugänglich in einem globalen Objekt definieren, wo Sie die Methode haben die $scope Variablen zu ändern. Oder machen Sie einfach die $scope global.

window.$scope = $scope; 
angular 
    .element(document.querySelector('#timbroDraggable')) 
    .draggable({ 
     containment: "parent", 
     // On drag start 
     start: function(event, ui) { 
      $(this).removeClass("draggable"); 
      $(this).addClass("dragging"); 
     }, 
     // On drag stop 
     stop: function(event, ui) { 
      window.oggettoDaTimbrare.posizioneTimbroX = ui.position.left; 
      window.oggettoDaTimbrare.posizioneTimbroY = ui.position.top; 

      $scope.documentoDaTimbrare[$scope.numPag].pagine.posX = window.oggettoDaTimbrare.posizioneTimbroX; 
      /* ... */ 
     } 
    }); 
+0

$ Scope ist außerhalb ziehbar definiert, so dass es nicht innerhalb davon zugegriffen werden kann –

+0

Ich habe die Frage mit einem Screenshot aktualisiert ... –