【问题标题】:java script - using parse.com query with angular ng-repeatjavascript - 使用带有角度 ng-repeat 的 parse.com 查询
【发布时间】:2014-04-04 08:24:24
【问题描述】:

我从 parse.com angd get 和 2 个对象的数组中进行查询。现在我想使用 ng-reapet('phone in phone') ,所以我需要将它转换为 json。我没有成功。由于某种原因,它不会将结果视为 json。

  var Project = Parse.Object.extend("Project");
  var query = new Parse.Query(Project);
  query.find({
      success: function (results) {
          var allProjects = [];
          for (var i = 0; i < results.length; i++) {
              allProjects.push(results[i].toJSON());
          }
          $scope.phones = allProjects;
          //i also tried this :               $scope.phones = JSON.stringify(allProjects);
      },
      error: function (error) {
          alert("Error: " + error.code + " " + error.message);
      }
  });

谢谢

【问题讨论】:

    标签: javascript angularjs parse-platform


    【解决方案1】:

    不确定您是否已经解决了这个问题,但我遇到了类似的问题并找到了您的帖子。我不确定你的 HTML 是什么样的,但我最终在我的转发器中使用了 Parse.Object 的 get 方法,如下所示:

    <ul ng-repeat="list in lists">
        <li>
            <a ng-href="#/lists/{{list.id}}">{{list.get('title')}}</a>
        </li>
    </ul>
    

    我还研究了如何使用 Promise,以便在您将 $scope.phones 设置为查询结果时,Parse 查询成功回调实际上会更新视图。我的代码与您的相似,但我的对象是 List 而不是 Project。这是我的样子:

    // Define your Parse object
    var List = Parse.Object.extend('List');
    
    // Define a function that runs your Parse query. Use an angular promise so that
    // the view updates when you set your $scope var equal to the query result
    function getList() {
        var deferred = $q.defer();
        var query = new Parse.Query(List);
    
        query.find({
            success: function(results) {
                deferred.resolve(results);
            },
            error: function(error) {
                deferred.reject(error.message);
            }
        });
    
        return deferred.promise;
    }
    
    // Call the getList function on load
    var promise = getLists();
    promise.then(function(lists) {
        $scope.lists = lists;
    });
    

    所以基本上,并不是 Angular 看不到正确的响应。您不必以任何方式修改 Parse 的结果。只是你需要像访问对象的属性一样使用 Parse.Object get 方法,并确保你使用的是 Promise 以便 Angular 访问你的查询结果,因为它应该在视图中。

    【讨论】:

      【解决方案2】:

      不要在你的 Angular 代码中使用 Parse 的 .get 函数,它不再工作了,而且更改你的 Angular 代码不是一个好主意,因为你的对象是三层嵌套的并且需要一个 get 方法。

      正确的方法是扩展对象,然后将值映射回该类中您需要的任何项目。 然后,您可以正常绑定到 ng-repeat,而无需专门为 Parse 更改 html 代码。

      var Game = Parse.Object.extend("Game"); 
      var query = new Parse.Query(Game);
      query.find({
      success: function(results) {
        $scope.$apply(function() {
        $scope.games = results.map(function(obj) {
          return {points: obj.get("points"), gameDate: obj.get("gameDate"),  parseObject: obj};
        });
      });
      },
      
      error: function(error) {
        console.log(error);
      } 
      

      【讨论】:

      • parseObject 不存在。知道如何解决吗?
      【解决方案3】:

      可能有更好的工具,frameworks 可以使用。

      第 188 行是获取。它会自动将模型的 json 加载到第 47 行定义的集合中。

      遍历解析查询结果中的条目在框架中全部自动化,因此您可以通过学习相关框架(即骨干)为自己节省大量时间。在主干/解析上,您专注于业务逻辑,而不是操纵网络 io 和查询结构。

      您问题中的“电话中的电话”可能只是一个嵌套模型或嵌套集合,IMO 可以通过对基本骨干框架的更高级操作来处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-19
        相关资源
        最近更新 更多