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()'ビヘイビアをそのまま維持することに注意しています。 –