在FIRST保存之前修改Parse.User对象

时间:2014-07-07 08:35:15

标签: parse-platform

我正在开发应用,我需要对在某些时段注册的新用户进行一些更改。

我添加了一个我将手动更改的变量,并检查该值是真还是假。

这是我目前的代码:

Parse.Cloud.beforeSave(Parse.User, function(request, status)
{
  console.log("********************************************");
  Parse.Cloud.useMasterKey();
  var special = true;
  if(special)
  {
    request.object.set("points", 1000);
    request.object.set("role/objectid", "PZHTquGti0");
  }else{
    request.object.set("points", 0);
    request.object.set("role/objectid", "TQyjIY59oL");
  }
  console.log("********************************************");
  status.success("Job finished successfully!");
}); // end of Parse.define

此代码错误输出" Uncaught Error:更改必须通过Parse.Object"并且我一直在查看文档以了解如何更改User对象的子类的值,但是没有找到。

此外,此代码也会在更新用户时运行,我不希望这样做。 任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:1)

首先,要在第一次保存(插入)时运行代码,您可以使用request.object.isNew()

由于role列是一个指针,您应该设置一个对象&不是直接的id字符串。 因此,创建一个新的虚拟对象并为其分配id。

Parse.Cloud.beforeSave(Parse.User, function(request, status)
{
  console.log("********************************************");
  Parse.Cloud.useMasterKey();

  if(request.object.isNew()){ // Object Insert
      var Role = Parse.Object.extend("_Role");
      var role = new Role();

      var special = true;
      if(special)
      {
        request.object.set("points", 1000);
        role.id = "PZHTquGti0";
        request.object.set("role", role);
      }else{
        request.object.set("points", 0);
        role.id = "TQyjIY59oL";
        request.object.set("role", role);
      }
  }
  else{ // Object Update
    //Do nothing
  }
  console.log("********************************************");

  status.success("Job finished successfully!");
}); // end of Parse.define