2015-11-16 16 views
13

Używam Parse.com jako mojego backendu i po Query, jak mogę wypełnić tablicę wszystkimi danymi wewnątrz obiektu Parse? jak mogę uniknąć ponownego mapowania? Przykład:Jak załadować do tablicy wszystkie obiekty po Query Parse.com

$scope.addContList = contacts.map(function(obj) { // re-map!!!! 
    return {name: obj.get("name")}; // mapping object using obj.get() 
}); 

mam mapowanie właściwości mojego analizowania obiektu jeden po drugim: Nazwa: obj.get („nazwa”), itd. Czy istnieje lepszy sposób?

$scope.addContList = []; 
    var ActivityContact = Parse.Object.extend("ActivityContact2"); 
    var query = new Parse.Query(ActivityContact); 
    query.equalTo("activityId", $scope.objId); 
    query.find({ 
     success: function(contacts) { 
      console.log("Successfully retrieved " + contacts.length + " contact."); 
       $scope.$apply(function() { 
        /*$scope.addContList = contacts.map(function(obj) { 
         return {name: obj.get("name")}; // mapping object using obj.get() 
        });*/ 
        for (var i = 0; i < contacts.length; i++) { 
          $scope.addContList.push(contacts.ALL_PROPERTIES); // contacts.ALL_PROPERTIES does not exist, I'm looking a way to do that and avoid mapping? 
        } 
       }); 
      console.log("--->>>"+JSON.stringify($scope.addContList, null, 4)); 

     }, 
     error: function(object, error) { 
      // The object was not retrieved successfully. 
      // error is a Parse.Error with an error code and message. 
     } 
    }); 
  1. powinienem używać biblioteki podkreślenia jest to, że jedynym sposobem, aby przejść?
  2. Widziałem niektóre ppl przy użyciu PFQuery, ale nie wiem, co to jest, czy PFQuery lepiej dla tego?

Dzięki!

Odpowiedz

3

innych odpowiedzi są poprawne, ale myślę, że to niepotrzebne, aby uruchomić cykl Digest za każdym razem dodać element z contacts do $scope.addContList. Coś jak to powinno wystarczyć:

query.find({ 
    success: function (contacts) { 
    $scope.apply(function() { 
     // 1) shallow-copy the list of contacts... 
     // (this is essentially what you are trying to do now) 
     $scope.addContList = contacts.slice(); 

     // or 2) just assign the reference directly 
     $scope.addContList = contacts; 

     // or 3) transform the Parse.Object instances into 
     // plain JavaScript objects 
     $scope.addContList = contacts.map(function (c) { 
      return c.toJSON(); 
     }); 
    }); 
    }, 
    error: function (object, error) { 
    // The object was not retrieved successfully. 
    // error is a Parse.Error with an error code and message. 
    } 
}); 

Opcje 1) i 2) będzie odpowiadać szablon podobny do

<div ng-repeat="cont in addContList">{{ cont.get('name') }}</div> 

natomiast opcja 3) może być używany jak

<div ng-repeat="cont in addContList">{{ cont.name }}</div> 
+0

Dzięki za odpowiedź! Używam $ scope.addContList do ng-repeat, więc potrzebuję tablicy podobnych do niej obiektów: [{name: "myname1"}, {name: "myname2"}, {name: "myname3 "}]. Jeśli użyję twojego rozwiązania, skończę z ParseObject, którego nie mogę użyć (a przynajmniej nie tak łatwo). Jeśli spojrzysz na komentarze do kodu, które mam: $ scope.addContList = contacts.map (function (obj) {return {nazwa: obj.get ("name")};}); Ponownie przypominam obiekt z tego samego powodu. – lito

+0

Rozumiem. Więc co było nie tak z twoim rozwiązaniem 'contacts.map (...)'? –

+0

Myślę, że jest pełna gadżetu i szukam lepszej opcji. Dzięki! – lito

2

Jeżeli zmienisz

$scope.addContList = contacts[i]; 

do:

$scope.addContList.push(contacts[i]); 

powinno być dobrze iść. Poprzedni kod przypisywał addContList do każdego elementu w tablicy contacts, zamiast dodawać do niego element. Tak więc na końcu twojej pętli for byłby to ostatni kontakt w twojej tablicy contacts.

+0

Dzięki za Twoja odpowiedź! Używam $ scope.addContList do ng-repeat, więc potrzebuję tablicy podobnych do niej obiektów: [{name: "myname1"}, {name: "myname2"}, {name: "myname3 "}]. Jeśli użyję twojego rozwiązania, skończę z ParseObject, którego nie mogę użyć (a przynajmniej nie tak łatwo). Jeśli spojrzysz na komentarze do kodu, które mam: $ scope.addContList = contacts.map (function (obj) {return {nazwa: obj.get ("name")};}); Ponownie przypominam obiekt z tego samego powodu. – lito

+0

Czy możesz podać próbkę na plunker lub jsfiddle? –

2

Zmiana:

$scope.addContList = contacts[i]; 

do

$scope.addContList.push(contacts[i]); 
+0

Dzięki za odpowiedź! Używam $ scope.addContList do ng-repeat, więc potrzebuję tablicy podobnych do niej obiektów: [{name: "myname1"}, {name: "myname2"}, {name: "myname3 "}]. Jeśli użyję twojego rozwiązania, skończę z ParseObject, którego nie mogę użyć (a przynajmniej nie tak łatwo). Jeśli spojrzysz na komentarze do kodu, które mam: $ scope.addContList = contacts.map (function (obj) {return {nazwa: obj.get ("name")};}); Ponownie przypominam obiekt z tego samego powodu. – lito

Powiązane problemy