如何删除 parse.com 中的特定行?
How can I delete specific rows in parse.com?
我在 Parse 中有一个名为 "Post" 的对象,在其中,我有名为 "title" 和 "content" 的列。我正在尝试向用户询问输入值并将其保存为 "remove"。如果用户的输入值 ("remove") 与已保存在 parse.com 中的 "title" 值匹配,我想在解析中删除整行,以便 "title"、"content" 并删除该行中的所有其他内容。删除部分不起作用,所以我想知道我的代码是否真的让它通过解析中保存的所有数据并找到与用户输入匹配的数据然后将其删除。
我做错了什么,我可以更改什么以使其删除整行?
先感谢您。
function getPosts(){
var query = new Parse.Query(Post);
query.find({
success: function(results){
for(var i in results){
var title = results[i].get("title");
var content = results[i].get("content");
var remove = $("#post-remove").val();
console.log("Remove: "+remove);
console.log("MAC Address: " +title);
console.log("place: "+content);
if (title == remove)
{
window.alert("The MAC address matches.");
console.log(remove+" matches " + title+ " and is located in " +content);
var Post = Parse.Object.extend("Post");
var query = new Parse.Query(Post);
query.find("objectId", {
success: function(yourObj){
//console.log(yourObj);
//Post.destroy({}); //if title matches remove, delete the Post (title and content) (but it's not deleting it)
Post.remove("title");
Post.remove("content");
}
});
}
}
}
});
}
首先,您可以使用Parse.Query.equalTo(key, value)
方法筛选您要查找的Post/s。这将使您的许多逻辑变得不必要。
此外,由于大多数解析调用都是异步的,我建议您了解 Parse Promises 并使用它们来代替您正在使用的回调。
最后,您不需要第二个嵌套查询,因为您已经有了要销毁的对象。您只需要在该对象上调用 destroy()
,如果您有一些额外的内容需要注意删除(即,您的 'content' 是指向另一个拥有的对象的指针 only by the Post you are deleted),您应该在云代码中为 Post 对象设置一个 beforeDestroy()
触发器,该触发器也将删除该指针。
澄清并补充一点@JakeT 可接受的答案:
1) 像这样查找要删除的对象:
function postsMatching(title) {
var Post = Parse.Object.extend("Post");
var query = new Parse.Query(Post);
query.equalTo("title", title);
return query.find();
}
2) 像这样删除一个解析对象数组:
Parse.Object.destroyAll(posts);
3) 像这样把两个想法放在一起(返回一个找到然后删除的承诺):
var title = $("#post-remove").val();
postsMatching(title).then(function(posts) {
console.log("deleting " + JSON.stringify(posts));
Parse.Object.destroyAll(posts);
}, function(error) {
console.log("error " + JSON.stringify(error));
});
我在 Parse 中有一个名为 "Post" 的对象,在其中,我有名为 "title" 和 "content" 的列。我正在尝试向用户询问输入值并将其保存为 "remove"。如果用户的输入值 ("remove") 与已保存在 parse.com 中的 "title" 值匹配,我想在解析中删除整行,以便 "title"、"content" 并删除该行中的所有其他内容。删除部分不起作用,所以我想知道我的代码是否真的让它通过解析中保存的所有数据并找到与用户输入匹配的数据然后将其删除。 我做错了什么,我可以更改什么以使其删除整行? 先感谢您。
function getPosts(){
var query = new Parse.Query(Post);
query.find({
success: function(results){
for(var i in results){
var title = results[i].get("title");
var content = results[i].get("content");
var remove = $("#post-remove").val();
console.log("Remove: "+remove);
console.log("MAC Address: " +title);
console.log("place: "+content);
if (title == remove)
{
window.alert("The MAC address matches.");
console.log(remove+" matches " + title+ " and is located in " +content);
var Post = Parse.Object.extend("Post");
var query = new Parse.Query(Post);
query.find("objectId", {
success: function(yourObj){
//console.log(yourObj);
//Post.destroy({}); //if title matches remove, delete the Post (title and content) (but it's not deleting it)
Post.remove("title");
Post.remove("content");
}
});
}
}
}
});
}
首先,您可以使用Parse.Query.equalTo(key, value)
方法筛选您要查找的Post/s。这将使您的许多逻辑变得不必要。
此外,由于大多数解析调用都是异步的,我建议您了解 Parse Promises 并使用它们来代替您正在使用的回调。
最后,您不需要第二个嵌套查询,因为您已经有了要销毁的对象。您只需要在该对象上调用 destroy()
,如果您有一些额外的内容需要注意删除(即,您的 'content' 是指向另一个拥有的对象的指针 only by the Post you are deleted),您应该在云代码中为 Post 对象设置一个 beforeDestroy()
触发器,该触发器也将删除该指针。
澄清并补充一点@JakeT 可接受的答案:
1) 像这样查找要删除的对象:
function postsMatching(title) {
var Post = Parse.Object.extend("Post");
var query = new Parse.Query(Post);
query.equalTo("title", title);
return query.find();
}
2) 像这样删除一个解析对象数组:
Parse.Object.destroyAll(posts);
3) 像这样把两个想法放在一起(返回一个找到然后删除的承诺):
var title = $("#post-remove").val();
postsMatching(title).then(function(posts) {
console.log("deleting " + JSON.stringify(posts));
Parse.Object.destroyAll(posts);
}, function(error) {
console.log("error " + JSON.stringify(error));
});