PARSE 检查 BeforeSave 上的原始对象
PARSE check original object on BeforeSave
我需要在保存之前检查原始对象以查看更改了哪些值。目前我有这个:
Parse.Cloud.beforeSave("Stats", function(request, response) {
if (!request.object.isNew()){
var query = new Parse.Query("Stats");
query.get(request.object.id, {
success: function(oldObject) {
alert('OLD:' + oldObject.get("Score") + "new:" + request.object.get("Score"));
/*Do My Stuff Here*/
response.success();
},
error: function(oldObject, error) {
response.error(error.message);
}
});
}else{
response.success();
}
});
问题是 oldObject
等于 request.object
。
警报结果也是这样:OLD:10 new:10
,但真正的旧分数是5
。另外根据之前保存的输入日志原来真的是5
.
知道我哪里做错了吗?
编辑:
这是保存前的日志。
before_save triggered for Stats as master:
Input: {"original":{"achievements":[],"Score":"100"updatedAt":"2015-11-02T10:09:24.170Z"},"update":{"Score":"110"}}
Result: Update changed to {"Score":"110"}
编辑2:
有没有办法得到脏值?
console.log("dirty: "+ request.object.dirty("score"));
I2015-11-03T14:23:12.198Z]dirty: true
知道字段是否被修改的官方方法是调用 dirty()
.
我的猜测是,查询特定对象会以某种方式更新当前范围内该对象的所有 "instances",这就是 dirty()
只有在调用 before[= 时才有效的方法26=]查询。
同时获取旧值和新值的一个选项是将其保存在单独的字段中。例如,您可以从您的客户调用(伪编码,但您明白了):
// OldScore here is 0
statObject.put("Score") = 100;
statObject.saveInBackground();
然后在 Cloud Code 中:
Parse.Cloud.beforeSave("Stats", function(request, response) {
var stat = request.object;
if (!stat.isNew()){
if (stat.dirty("Score")) {
var newValue = stat.get("Score") // 100
var oldValue = stat.get("OldScore") // 0
// Do other stuff here
stat.put("OldScore", newValue);
response.success();
} else {
response.success();
}
} else {
response.success();
}
});
不过你描述的问题有点奇怪。也许您可以尝试使用 fetch()
命令;它应该 return 旧值。但是,它会使所有其他脏字段无效。
我需要在保存之前检查原始对象以查看更改了哪些值。目前我有这个:
Parse.Cloud.beforeSave("Stats", function(request, response) {
if (!request.object.isNew()){
var query = new Parse.Query("Stats");
query.get(request.object.id, {
success: function(oldObject) {
alert('OLD:' + oldObject.get("Score") + "new:" + request.object.get("Score"));
/*Do My Stuff Here*/
response.success();
},
error: function(oldObject, error) {
response.error(error.message);
}
});
}else{
response.success();
}
});
问题是 oldObject
等于 request.object
。
警报结果也是这样:OLD:10 new:10
,但真正的旧分数是5
。另外根据之前保存的输入日志原来真的是5
.
知道我哪里做错了吗?
编辑: 这是保存前的日志。
before_save triggered for Stats as master:
Input: {"original":{"achievements":[],"Score":"100"updatedAt":"2015-11-02T10:09:24.170Z"},"update":{"Score":"110"}}
Result: Update changed to {"Score":"110"}
编辑2: 有没有办法得到脏值?
console.log("dirty: "+ request.object.dirty("score"));
I2015-11-03T14:23:12.198Z]dirty: true
知道字段是否被修改的官方方法是调用 dirty()
.
我的猜测是,查询特定对象会以某种方式更新当前范围内该对象的所有 "instances",这就是 dirty()
只有在调用 before[= 时才有效的方法26=]查询。
同时获取旧值和新值的一个选项是将其保存在单独的字段中。例如,您可以从您的客户调用(伪编码,但您明白了):
// OldScore here is 0
statObject.put("Score") = 100;
statObject.saveInBackground();
然后在 Cloud Code 中:
Parse.Cloud.beforeSave("Stats", function(request, response) {
var stat = request.object;
if (!stat.isNew()){
if (stat.dirty("Score")) {
var newValue = stat.get("Score") // 100
var oldValue = stat.get("OldScore") // 0
// Do other stuff here
stat.put("OldScore", newValue);
response.success();
} else {
response.success();
}
} else {
response.success();
}
});
不过你描述的问题有点奇怪。也许您可以尝试使用 fetch()
命令;它应该 return 旧值。但是,它会使所有其他脏字段无效。