在 Parse 中保存基本关系
Saving a basic relation in Parse
这个例子很简单,但毫不奇怪,它不起作用。 mLate 是来自 Late table 的对象或对象数组。
我的代码:
var user = Parse.Object.extend("User");
var userQuery = new Parse.Query(Parse.User);
var Late = Parse.Object.extend("Late");
var lateQuery = new Parse.Query(Late);
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
success: function (userDetails) {
var relation = userDetails.relation("mLate");
relation.add(mLate);
userDetails.save();
鉴于 Parse SDK,我无法想象我哪里出错了。我不断得到
POST https://api.parse.com/1/classes/_User/yCDDEWoiwM 400(错误请求)
新假设和更多代码
我知道这真的很简单,我真的很生气 Parse 很少在他们解释的内容中添加哪怕是一点点细节。你看过他们的吗API(好吧,我不想上我的肥皂盒。。。)
我的假设是,我从 Late table 中转换了 Parse.Object 几次,并且不知何故 Parse 不再知道那里发生了什么。
下面是更完整的代码:
var user = Parse.Object.extend("User");
var userQuery = new Parse.Query(Parse.User);
var Late = Parse.Object.extend("Late");
var lateQuery = new Parse.Query(Late);
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
success: function (userDetails) {
mLate = [];
mLate1 = [];
lateQuery.find({
success: function (allLate) {
var aLate = allLate
for (var i = 0; i < aLate.length; i++){
var oneLate = aLate[i];
if(something valid) {
mLate.push(oneLate)
}else{
mLate1.push(oneLate)
var relation = userDetails.relation("mLate");
relation.add(mLate);
userDetails.save();
不是 100% 清楚意图,因为 mLate 变量未定义,但您可以获得这样的用户:
var user = new Parse.User({id:"yCDDEWoiwM"});
user.fetch().then(function(user) {
// add to the relation here, then
return user.save();
}).then(function () {
console.log("saved");
});
你不能那样扩展用户。所有特殊 类(用户、安装、角色等)都应这样处理:
"_User", "_Roles", "_Installation"
例如:
var user = Parse.Object.extend("_User");
但最好以这种方式引用它们:
var user = Parse.Object.extend(Parse.User);
但据我所知,也不需要第一行创建 user
对象。如果您只想创建一个查询,您也不需要 "extend" 一个对象。如果您想创建一个指针,通常使用 "extending" 但在您的情况下您不需要。
看看这是否适合你:
//var user = Parse.Object.extend(Parse.User);
var userQuery = new Parse.Query(Parse.User);
//var Late = Parse.Object.extend("Late");
var lateQuery = new Parse.Query("Late");
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
success: function (userDetails) {
var relation = userDetails.relation("mLate");
relation.add(mLate);
userDetails.save();
如果你想让查询更动态一点,你可以这样做:
var userQuery = new Parse.Query(Parse.User);
queryQuery.equalTo("objectId", userId);
userQuery.first().then(function(userDetails){
var relation = userDetails.relation("mLate");
relation.add(mLate);
return Parse.Promise.when(userDetails.save());
}).then( // make your call to response.success ...);
另一个可能的问题是您的函数在 userDetails.save()
操作有机会完成之前返回。如果您将查询修改为类似于上面的内容以使用 Promise 那么它将保证对 save()
的异步调用将实际完成。
未显示的是调用 response.success
或 error
的承诺链的延续,但您可以在其中添加它。
这个例子很简单,但毫不奇怪,它不起作用。 mLate 是来自 Late table 的对象或对象数组。 我的代码:
var user = Parse.Object.extend("User");
var userQuery = new Parse.Query(Parse.User);
var Late = Parse.Object.extend("Late");
var lateQuery = new Parse.Query(Late);
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
success: function (userDetails) {
var relation = userDetails.relation("mLate");
relation.add(mLate);
userDetails.save();
鉴于 Parse SDK,我无法想象我哪里出错了。我不断得到 POST https://api.parse.com/1/classes/_User/yCDDEWoiwM 400(错误请求)
新假设和更多代码
我知道这真的很简单,我真的很生气 Parse 很少在他们解释的内容中添加哪怕是一点点细节。你看过他们的吗API(好吧,我不想上我的肥皂盒。。。)
我的假设是,我从 Late table 中转换了 Parse.Object 几次,并且不知何故 Parse 不再知道那里发生了什么。
下面是更完整的代码:
var user = Parse.Object.extend("User");
var userQuery = new Parse.Query(Parse.User);
var Late = Parse.Object.extend("Late");
var lateQuery = new Parse.Query(Late);
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
success: function (userDetails) {
mLate = [];
mLate1 = [];
lateQuery.find({
success: function (allLate) {
var aLate = allLate
for (var i = 0; i < aLate.length; i++){
var oneLate = aLate[i];
if(something valid) {
mLate.push(oneLate)
}else{
mLate1.push(oneLate)
var relation = userDetails.relation("mLate");
relation.add(mLate);
userDetails.save();
不是 100% 清楚意图,因为 mLate 变量未定义,但您可以获得这样的用户:
var user = new Parse.User({id:"yCDDEWoiwM"});
user.fetch().then(function(user) {
// add to the relation here, then
return user.save();
}).then(function () {
console.log("saved");
});
你不能那样扩展用户。所有特殊 类(用户、安装、角色等)都应这样处理:
"_User", "_Roles", "_Installation"
例如:
var user = Parse.Object.extend("_User");
但最好以这种方式引用它们:
var user = Parse.Object.extend(Parse.User);
但据我所知,也不需要第一行创建 user
对象。如果您只想创建一个查询,您也不需要 "extend" 一个对象。如果您想创建一个指针,通常使用 "extending" 但在您的情况下您不需要。
看看这是否适合你:
//var user = Parse.Object.extend(Parse.User);
var userQuery = new Parse.Query(Parse.User);
//var Late = Parse.Object.extend("Late");
var lateQuery = new Parse.Query("Late");
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
success: function (userDetails) {
var relation = userDetails.relation("mLate");
relation.add(mLate);
userDetails.save();
如果你想让查询更动态一点,你可以这样做:
var userQuery = new Parse.Query(Parse.User);
queryQuery.equalTo("objectId", userId);
userQuery.first().then(function(userDetails){
var relation = userDetails.relation("mLate");
relation.add(mLate);
return Parse.Promise.when(userDetails.save());
}).then( // make your call to response.success ...);
另一个可能的问题是您的函数在 userDetails.save()
操作有机会完成之前返回。如果您将查询修改为类似于上面的内容以使用 Promise 那么它将保证对 save()
的异步调用将实际完成。
未显示的是调用 response.success
或 error
的承诺链的延续,但您可以在其中添加它。