-2

我正在尝试将我的计数器设置为在分数减少时不低于零,目前它可以变为负数。如何将最小限制设置为零?

到目前为止,这是我设法做到的:

btnPointTeamD.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                object.increment("team_d_score");
                                object.saveInBackground();
                            }
                        });

btnMinusTeamC.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                object.increment("team_c_score", -1);
                                object.saveInBackground();
                            }
                        });
4

1 回答 1

1

云代码有所谓的beforeSaveafterSave触发器。 beforeSave是你在这里需要的。

beforeSave 触发器包含所有新数据(注意:没有旧数据),您可以检查object.dirty("key");该字段是否已更改。您也不必对这种特定情况进行任何检查。

Parse.Cloud.beforeSave("ClassName", function(request, response) {
    var object = request.params.object;
    if( object.get("team_c_score") < 0 ) object.set("team_c_score", 0);
    response.success();
});

一些注意事项:如果你 return response.error(),保存将通过,所以这就是你验证输入的方式。一个字段包含非法字符,或者您没有预料到的数据?抛出一个错误,这样它就不会被保存。

您也不应该在成功响应中添加任何内容。这将导致错误。

如果该函数存在,它会被自动调用,并且总是会被调用。你不能跳过它。即使您从仪表板更新数据,它也会被调用。与afterSave触发器相同,尽管修改其中的对象不会做任何事情,除非您保存它。

这应该放在您的 main.js 或 main.js 所需的文件中。我的每个自定义类都有一个文件夹。每个类都有一个classNameController.js,其中包含 beforeSave、afterSave、初始化程序以及与该对象直接相关的任何云代码函数。

Main 需要这些控制器中的每一个,这会向服务器打开所有 Parse.Cloud 端点。

托管 Parse.com 上的 beforeSave 和 afterSave 触发器有 3 秒超时。我不知道解析服务器是否超时。我从来没有测试过它。但是为了安全起见,服务器调用不要超过几个。

于 2017-06-29T14:23:01.597 回答