dav*_*ber 7 javascript node.js sails.js waterline
我想创建一个自定义的属性集和生命周期方法,这些属性和生命周期方法在我所有的Sails.js模型之间共享.
Sails.js通过调用Waterline.Collection.extend()方法并提供在/api/models目录中找到的模型定义来自动创建和注册模型对象.
从父级扩展模型定义的最佳方法是什么?我已经尝试过使用_.extend(sails.config.model.parentModel, childModel)但很遗憾,sails对象没有全局暴露(因为这是在加载orm钩子后完成的).我也可以简单地require()在所有模型中使用基本模型并扩展它.
什么是一个与Sails很好的干净方法?
mar*_*ebl 10
使用config/models.js为模型提供全局默认值是完全合法的.关于覆盖实例和类方法,根据我的测试,没有什么值得注意的.定义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();
}
},
}
Run Code Online (Sandbox Code Playgroud)
测试
> 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4329 次 |
| 最近记录: |