2013-10-30 114 views
1

在定义模型后,是否有扩展(可能是继承)模型的方法来添加钩子和字段?如何扩展Sequelize模型

因此,像这样:

User = sequelize.define("user", { 
    name: sequelize.String 
}); 

makeStateful(User); // adds state,updated,added fields and some hooks 

回答

5

这是不可能的时刻。但是你可以很容易地使它反过来工作:在定义模型之前先定义你的mixin,并在定义模型时使用它:

var Sequelize = require('sequelize') 
    , sequelize = new Sequelize('sequelize_test', 'root') 

var mixin = { 
    attributes: { 
    state: Sequelize.STRING, 
    added_at: Sequelize.DATE 
    }, 
    options: { 
    hooks: { 
     beforeValidate: function(instance, cb) { 
     console.log('Validating!!!') 
     cb() 
     } 
    } 
    } 
} 

var User = sequelize.define(
    'Model' 
, Sequelize.Utils._.extend({ 
    username: Sequelize.STRING 
    }, mixin.attributes) 
, Sequelize.Utils._.extend({ 
    instanceMethods: { 
     foo: function() { 
     return this.username 
     } 
    } 
    }, mixin.options) 
) 

User.sync({ force: true }).success(function() { 
    User.create({ username: 'foo' }).success(function(u) { 
    console.log(u.foo()) // 'foo' 
    }) 
}) 
+4

难道还不行吗? –