orm2 中文文档 3.3 模型钩子
2016-01-10 12:07
183 查看
译者:飞龙
来源:Model Hooks
如果你想要监听发生在模型实例上的事件,你可以附带一个函数,它会在发生时调用。
现在支持下面这些事件:
所有钩子函数调用时,
对于所有
这个工作流允许你在调用
示例
来源:Model Hooks
如果你想要监听发生在模型实例上的事件,你可以附带一个函数,它会在发生时调用。
现在支持下面这些事件:
afterLoad:(无参数)加载和准备所用实例之后;
afterAutoFetch:(无参数)自动获取关联(如果有的话)之后,无论有没有关联都会触发;
beforeSave:(无参数)尝试保存之前;
afterSave:(bool success)保存之后;
beforeCreate:(无参数)尝试保存新的实例之前(优先于
beforeSave);
afterCreate:(bool success)保存新的实例之后;
beforeRemove:(无参数)尝试删除实例之前;
afterRemove:(bool success)删除实例之后;
beforeValidation:(无参数)在所有验证之前,优先于
beforeCreate和
beforeSave。
所有钩子函数调用时,
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(); } } } });
相关文章推荐
- 24. Swap Nodes in Pairs leetcode Python 2016 new Season
- Centos7原生的repo源下载---备忘
- 机器学习之导数最优化方法
- 开源性能测试工具——jemeter介绍+安装说明
- xcode C++一些简单设置
- CSS 弹性布局如何实现
- xcode C++一些简单设置
- MySql获取随机行
- hdu 1226 超级密码
- [leetcode] 148. Sort List 解题报告
- 解決中英混合輸入時標點切換問題的辦法
- LeetCode - Convert Sorted List to Binary Search Tree
- 计数排序(其实思想是桶排序)
- 学习笔记 - Mac下隐藏文件的显示与隐藏
- JAVA获得设备信息
- MYsQL优化SQL
- J2EE SSH框架整合教程
- ABI (应用程序二进制接口)
- 贡献值列表
- 冒泡排序