Подтвердить что ты не робот

Как загрузить в массив все объекты после Query Parse.com

Я использую Parse.com в качестве моего бэкэнд и после запроса, как я могу заполнить массив всеми данными внутри объекта Parse? как я могу избежать повторного сопоставления? Пример:

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

Я сопоставляю свойства объекта Parse один за другим: name: obj.get( "name" ) и т.д. есть ли лучший способ?

    $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.
        }
    });
  • Должен ли я использовать библиотеку Underscore, это единственный способ пойти?
  • Я видел некоторый ppl, используя PFQuery, но я не знаю, что это такое, PFQuery лучше для этого?

Спасибо!

4b9b3361

Ответ 1

Другие ответы верны, но я думаю, что нет необходимости запускать цикл дайджеста каждый раз, когда вы добавляете элемент от contacts до $scope.addContList. Что-то вроде этого должно быть достаточно:

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.
  }
});

Варианты 1) и 2) будут соответствовать шаблону, аналогичному

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

а вариант 3) можно использовать как

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

Ответ 2

Если вы измените

$scope.addContList = contacts[i];

в

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

тебе должно быть хорошо идти. Ваш предыдущий код переписывал addContList как каждый элемент массива contacts, а не добавлял к нему элемент. Итак, в конце вашего цикла for $scope.addContList будет последним контактом в вашем массиве contacts.

Ответ 3

Изменить:

$scope.addContList = contacts[i];

к

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