博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
orm2 中文文档 3.3 模型钩子
阅读量:6426 次
发布时间:2019-06-23

本文共 1384 字,大约阅读时间需要 4 分钟。

译者:

来源:

如果你想要监听发生在模型实例上的事件,你可以附带一个函数,它会在发生时调用。

现在支持下面这些事件:

  • afterLoad:(无参数)加载和准备所用实例之后;

  • afterAutoFetch:(无参数)自动获取关联(如果有的话)之后,无论有没有关联都会触发;

  • beforeSave:(无参数)尝试保存之前;

  • afterSave:(bool success)保存之后;

  • beforeCreate:(无参数)尝试保存新的实例之前(优先于beforeSave);

  • afterCreate:(bool success)保存新的实例之后;

  • beforeRemove:(无参数)尝试删除实例之前;

  • afterRemove:(bool success)删除实例之后;

  • beforeValidation:(无参数)在所有验证之前,优先于beforeCreatebeforeSave

所有钩子函数调用时,this为对应的实例,所以你可以访问到与之相关的任何东西。

对于所有before*钩子,你可以添加一个额外的参数到钩子函数中。这个函数用来告诉钩子应该继续执行下去还是中断。你或许已经从Express的工作流中熟悉了这一点。下面是一个示例:

var Person = db.define("person", {    name    : String,    surname : String}, {    hooks: {        beforeCreate: function (next) {            if (this.surname == "Doe") {                return next(new Error("No Does allowed"));            }            return next();        }    }});

这个工作流允许你在调用next之前执行异步的操作。如果你不打算使用next就不要把它定义为参数,否则会阻塞工作流。

常见问题

一个常见问题涉及到在钩子内部的嵌套回调中访问this。这个问题的原因是,this对象仅仅在顶级钩子函数的作用域内是有效的,而在回调中会有各种不同的值。要解决这一问题,可以创建一个对象保存this的引用,并且在回调中用它来访问模型的属性。

示例

var Person = db.define("person", {    name    : String,    surname : String}, {    hooks: {        beforeCreate: function (next) {            var _this = this;            checkName(this, function(err, result)) {                if(err) return next(err);                _this.name = result.name;                _this.surname = result.surname;                next();            }        }    }});

转载地址:http://uifga.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Repository 与 DAO
查看>>
Zabbix监控Windows主机
查看>>
IBM x3850 RAID5数据恢复方案及过程
查看>>
移动计算领域五大机遇:交通运输优势待挖掘
查看>>
如何把win7 旗舰版升级到sp1最新版本
查看>>
android 调用系统界面
查看>>
Software Enginering-------using git
查看>>
浅谈IP地址-1
查看>>
我的友情链接
查看>>
C#中的线程池使用(一)
查看>>
利用Windows Server Backup功能备份活动目录
查看>>
RAC维护手记08-ASM磁盘组信息查看常用命令
查看>>
实验08 磁盘和文件系统管理
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
FastDFS整合nginx后,nginx一直报错
查看>>
使用Fuel安装OpenStack juno之三使用OpenStack创建云主机和Volume
查看>>
zabbix安装源
查看>>
Eclipse+kafka集群 实例源码
查看>>