我担心我知道答案,但我会把它扔出去。有没有办法使用Cloud Code在所有Parse.Object子类上触发beforeSave方法?
所以我想在所有保存上运行一些代码,而不是Parse的Object的任何特定子类。
我试过这个:
Parse.Cloud.beforeSave(Parse.Object, function(request, response) {
}
......但它似乎没有被触发。
答案 0 :(得分:2)
我从未听说过这一点,坦率地说,看不到多少好处。第一个参数应该与一个类名匹配,所以我怀疑这个开箱即用的方法。
但是,你真的应该将所有单独的beforeSave分开。我们在云代码中为每个类创建一个单独的文件夹,并为每个类提供一个Controller(beforeSave,afterSave,直接与该类相关的云函数),它具有调用其他Repos的云函数,用于处理不同类的逻辑。 Controller是唯一应该从其他类接触Repos的文件。然后每个类都有Repo,它处理特定的任务/逻辑,并经常保存或提取对象。
然后是Factory文件,它不进行保存,不进行提取,不进行额外调用。它们仅使用传入的可用数据执行业务逻辑。
每次你创建一个新的Parse Class时,我都会养成设置该控制器的习惯,你可以在那里添加一个beforeSave触发器。
答案 1 :(得分:0)
不,你不能。 您只能为用户定义的类和预定义类创建触发器。 如果类是用户定义的,则第一个参数必须是字符串 e.g。
Parse.Cloud.beforeSave("Car", function(request, response) {
...
}
如果类是预定义的,则第一个参数必须是Parse.ClassName e.g。
Parse.Cloud.beforeSave(Parse.User, function(request, response) {
...
}
答案 2 :(得分:0)
您可以首先获取查询schema
的所有类名(请参阅this post),然后使用for
循环向每个类添加beforeSave
挂钩。在伪代码中:
var classNames = getClassNamesFromSchemaQuery();
classNames.foreach(var classObject){
Parse.Cloud.beforeSave(classObject.className, (req, resp){
// resto of the code here
})
}