parse.com 多对多获取指针 ID 列表 Javascript
parse.com many-to-many get list of Pointer ID with Javascript
我对 parse.com 上的多对多关系有疑问。
首先我有两个classes(组和用户)和一个class(UserInGroup)来实现m-to-m关系。
Class结构:
群组:
objectId(字符串) -- GroupName(字符串) -- ...
用户:
objectId(字符串) -- 用户名(字符串) -- ...
用户组内:
objectId(string) -- Group(Pointer< Groups>) -- User(Pointer< Users>)
如何获取特定组中所有用户的用户名(我知道组的 objectId)。
我试过了
function getUserNameOfGroup(GroupID){
var UserInGroup = Parse.Object.extend("UserInGroup");
var query = new Parse.Query(UserInGroup);
var usersArray = [];
var Groups = Parse.Object.extend("Groups");
var collectionQuery = new Parse.Query(Groups);
collectionQuery.get(GroupID, {
success: function(group) {
query.equalTo("Group", group);
var usersArray = [];
query.find({
success: function(results) {
for (var i = 0; i < results.length; i++) {
var object = results[i];
var user = object.get("User");
user.fetch({
success: function(tempUser) {
usersArray.push(user.get("UserName"));
}
}).done(function() {
if(results.length == usersArray.length){
//do something with the array
}
});
}
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
},
error: function(object, error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
为了测试我把
if(results.length == usersArray.length){
for (var i = 0; i < usersArray.length; i++) {
alert(usersArray[i]);
}
}
在完成部分。 usersArray 的第一个条目总是 "undefinde".
我做错了什么?或者更确切地说,有没有更简单、更漂亮、更快速的方法来获取数组?我确定有更好的解决方案 ;)。
感谢您的帮助。
无需对 UserInGroup 的用户属性进行额外查询。这些可以使用 include() 急切地获取,如下所示:
// return a promise that is fulfilled with an array of users belonging to
// the Group with id groupId
function usersInGroup(groupId) {
var groupQuery = new Parse.Query("Groups");
return groupQuery.get(groupId).then(function(group) {
var userInGroupQuery = new Parse.Query("UserInGroup");
userInGroupQuery.equalTo("Group", group);
// eagerly fetch the related user...
userInGroupQuery.include("User");
return userInGroupQuery.find();
}).then(function(results) {
var users = [];
for (var i = 0; i < results.length; i++) {
var object = results[i];
users.push(object.get("User"));
}
return users;
});
}
这样称呼它:
usersInGroup(someGroupId).then(function(users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
console.log(user.getUserName()); // or get("username")
}
}, function(error) {
console.log(error);
});
我对 parse.com 上的多对多关系有疑问。
首先我有两个classes(组和用户)和一个class(UserInGroup)来实现m-to-m关系。
Class结构:
群组: objectId(字符串) -- GroupName(字符串) -- ...
用户: objectId(字符串) -- 用户名(字符串) -- ...
用户组内: objectId(string) -- Group(Pointer< Groups>) -- User(Pointer< Users>)
如何获取特定组中所有用户的用户名(我知道组的 objectId)。
我试过了
function getUserNameOfGroup(GroupID){
var UserInGroup = Parse.Object.extend("UserInGroup");
var query = new Parse.Query(UserInGroup);
var usersArray = [];
var Groups = Parse.Object.extend("Groups");
var collectionQuery = new Parse.Query(Groups);
collectionQuery.get(GroupID, {
success: function(group) {
query.equalTo("Group", group);
var usersArray = [];
query.find({
success: function(results) {
for (var i = 0; i < results.length; i++) {
var object = results[i];
var user = object.get("User");
user.fetch({
success: function(tempUser) {
usersArray.push(user.get("UserName"));
}
}).done(function() {
if(results.length == usersArray.length){
//do something with the array
}
});
}
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
},
error: function(object, error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
为了测试我把
if(results.length == usersArray.length){
for (var i = 0; i < usersArray.length; i++) {
alert(usersArray[i]);
}
}
在完成部分。 usersArray 的第一个条目总是 "undefinde".
我做错了什么?或者更确切地说,有没有更简单、更漂亮、更快速的方法来获取数组?我确定有更好的解决方案 ;)。
感谢您的帮助。
无需对 UserInGroup 的用户属性进行额外查询。这些可以使用 include() 急切地获取,如下所示:
// return a promise that is fulfilled with an array of users belonging to
// the Group with id groupId
function usersInGroup(groupId) {
var groupQuery = new Parse.Query("Groups");
return groupQuery.get(groupId).then(function(group) {
var userInGroupQuery = new Parse.Query("UserInGroup");
userInGroupQuery.equalTo("Group", group);
// eagerly fetch the related user...
userInGroupQuery.include("User");
return userInGroupQuery.find();
}).then(function(results) {
var users = [];
for (var i = 0; i < results.length; i++) {
var object = results[i];
users.push(object.get("User"));
}
return users;
});
}
这样称呼它:
usersInGroup(someGroupId).then(function(users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
console.log(user.getUserName()); // or get("username")
}
}, function(error) {
console.log(error);
});