inheritanceSails.js模型的属性和生命周期函数

我想创build一个自定义的属性集和生命周期方法,这些方法在我所有的Sails.js模型之间共享。

Sails.js通过调用Waterline.Collection.extend()方法自动创build并注册模型对象,并提供在/api/models目录中find的模型定义。

从父类扩展我的模型定义最好的方法是什么? 我已经尝试过使用_.extend(sails.config.model.parentModel, childModel)但遗憾的是_.extend(sails.config.model.parentModel, childModel)对象并没有全局公开(因为这是在加载orm钩子之后完成的)。 我也可以简单地在我的所有模型中require()基础模型并扩展它。

什么是一个干净的方法,与Sails相得益彰?

使用config/models.js为模型提供全局默认值是完全有效的。 关于压倒一切的实例和类的方法,根据我的testing,没有什么值得注意的。 在模型定义中定义sails.config.models中存在的属性/方法将覆盖此模型,使其不确定。

定义

 // config/models.js module.exports.models = { attributes: { // base model instanceMethod toJSON: function() { console.log('base.toJSON'); return this.toObject(); } }, // base model classMethod test: function() { console.log('base.test'); } }; // api/models/first.js module.exports = { attributes: { }, // Overriding classMethods and lifecycle callbacks test: function() { console.log('first.test'); } }; // api/models/second.js module.exports = { attributes: { // Overriding instance methods and attributes toJSON: function() { console.log('second.toJSON'); return this.toObject(); } }, } 

testing

 > sails.models.first.test(); >'first.test' // sails.config.models.test overridden > sails.models.first.findOne(1).exec(err,res){ res.toJSON(); }); > 'base.toJSON' // sails.config.models.attributes.toJSON not overridden > sails.models.second.test(); > 'base.test'; // sails.config.models.test not overridden > sails.models.second.findOne(1).exec(err,res) { res.toJSON(); }); > 'second.toJSON' // sails.config.models.attributes.toJSON overridden