【问题标题】: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);
}
【解决方案3】:
可能有更好的工具,frameworks 可以使用。
第 188 行是获取。它会自动将模型的 json 加载到第 47 行定义的集合中。
遍历解析查询结果中的条目在框架中全部自动化,因此您可以通过学习相关框架(即骨干)为自己节省大量时间。在主干/解析上,您专注于业务逻辑,而不是操纵网络 io 和查询结构。
您问题中的“电话中的电话”可能只是一个嵌套模型或嵌套集合,IMO 可以通过对基本骨干框架的更高级操作来处理。