Javascript 继承Sails.js模型的属性和生命周期功能
我想创建一组自定义的属性和生命周期方法,在我的所有Sails.js模型之间共享 Sails.js通过调用Javascript 继承Sails.js模型的属性和生命周期功能,javascript,node.js,sails.js,waterline,Javascript,Node.js,Sails.js,Waterline,我想创建一组自定义的属性和生命周期方法,在我的所有Sails.js模型之间共享 Sails.js通过调用Waterline.Collection.extend()方法并提供/api/models目录中的模型定义,自动创建并注册模型对象 从父对象扩展模型定义的最佳方式是什么?我已经尝试过使用.extend(sails.config.model.parentModel,childModel),但遗憾的是sails对象没有全局公开(因为这是在加载orm钩子之后完成的)。我还可以在所有模型中简单地req
Waterline.Collection.extend()
方法并提供/api/models
目录中的模型定义,自动创建并注册模型对象
从父对象扩展模型定义的最佳方式是什么?我已经尝试过使用.extend(sails.config.model.parentModel,childModel)
,但遗憾的是sails
对象没有全局公开(因为这是在加载orm钩子之后完成的)。我还可以在所有模型中简单地require()
基本模型并对其进行扩展
什么是一种适合Sails的干净方法?使用
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();
}
},
}
测试
> 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
刚刚发现有
sails.config.model
在规范化时与每个模型合并。在实现生命周期功能时,将此作为基础模型是否有意义?我的基本模型定义了toJSON()
方法。当我的子模型也需要重写时,我应该怎么做?目前我正在注意在重写时保持父对象toJSON()
行为的完整性。是否可以调用父方法?像下面这样调用sails.models.toJSON()
将得到“无方法”错误,尽管我可以看到列出的函数(通过console.log
)api/models/second.js module.exports={attributes:{//重写实例方法和属性到json:function(){var somethingElse=sails.models.toJSON();//执行其他操作..返回somethingElse;},}