Javascript 解析云-删除属性(指针)
我的数据模型由3个对象组成,其中两个(子对象)使用指针链接到父对象 MyModel是具有两个属性的父对象:颜色和目标。两者都是指向其他对象的指针 当我删除父对象时,我希望子对象也被删除,警告是指针可能为nil,因此在尝试删除之前,我需要检查是否存在某些内容 [我不熟悉Javascript,所以这可能也是问题的一部分]Javascript 解析云-删除属性(指针),javascript,parse-platform,Javascript,Parse Platform,我的数据模型由3个对象组成,其中两个(子对象)使用指针链接到父对象 MyModel是具有两个属性的父对象:颜色和目标。两者都是指向其他对象的指针 当我删除父对象时,我希望子对象也被删除,警告是指针可能为nil,因此在尝试删除之前,我需要检查是否存在某些内容 [我不熟悉Javascript,所以这可能也是问题的一部分] Parse.Cloud.beforeDelete("MyModel", function(request) { if request.has(request.object.
Parse.Cloud.beforeDelete("MyModel", function(request) {
if request.has(request.object.colors) {
color = request.object.colors;
Parse.Object.destroyAll(color, {
success: function() {},
error: function(error) {
console.error("Error deleting related color " + error.code + ": " + error.message);
}
});
}
if request.has(request.object.goal) {
goal = request.object.goal;
Parse.Object.destroyAll(goal, {
success: function() {},
error: function(error) {
console.error("Error deleting related goal " + error.code + ": " + error.message);
}
});
}
});
让我们将其分解成更小的函数,并在此过程中纠正操作代码中的几个问题。将事情简化为更小的承诺返回函数非常有帮助,可以保持代码模块化和并发性的可管理性 编辑 通常,最好使用指针来关联对象。下面是一个通用函数,用于通过指针删除相关对象:
function deleteRelatedPointer(myModel, pointerName) {
var pointer = myModel.get(pointerName);
if (pointer) {
return pointer.fetch().then(function(relatedObject) {
return relatedObject.destroy();
});
} else {
return null;
}
}
有些作者通过包含相关对象id的字符串列来关联对象。下面是删除与id相关的对象的等效函数:
function deleteRelatedId(myModel, columnName, relatedClass) {
var relatedId = myModel.get(columnName);
if (relatedId) {
var query = new Parse.Query(relatedClass);
return query.get(relatedId).then(function(relatedObject) {
return relatedObject.destroy();
});
} else {
return null;
}
}
现在,beforeDelete
方法很容易编写和理解。(假设通过指针的关系):
另一个需要注意的重要事项是,before钩子接受响应对象,并且需要在相关任务完成后调用该对象上的success/error
所有这些都取决于承诺,这些承诺是必要的,也是非常有用的 问题的文本意味着
颜色
和目标
是单一的,只是指向另一个对象的单个指针。但是“颜色”的复数命名让我感到奇怪。代码使用destroyAll()
,它需要销毁一个数组(复数)。你能澄清一下吗?是的,它们是单数的。颜色包含textColor和bgColor,这是命名的原因,但它是一个对象。
Parse.Cloud.beforeDelete("MyModel", function(request, response) {
var myModel = request.object;
deleteRelatedPointer(myModel, "colors").then(function() {
return deleteRelatedPointer(myModel , "goal");
}).then(function() {
response.success();
}, function(error) {
response.error(error);
});
}