Ответ 1
Конфигурация модели полностью документирована здесь, на SailsJS.org. @umassthrower прав, указав, что добавление метода экземпляра в config/models.js
добавит его ко всем вашим моделям; он также правильно заметил, что это не намеренное использование конфигурационного файла.
Причина, по которой вы обнаруживаете, что это немного сложнее в Sails, чем Rails, заключается в том, что Ruby имеет реальные классы и наследование, а Javascript имеет только объекты. Один довольно чистый способ имитации наследования и расширения ваших объектов модели из "базового" объекта - это использовать что-то вроде Lodash _.merge
function. Например, вы можете сохранить базовую модель в lib/BaseModel.js
:
// lib/BaseModel.js
module.exports = {
attributes: {
someAttribute: 'string',
someInstanceFunction: function() {
// do some amazing (synchronous) calculation here
}
}
};
Затем в файле модели требуется lodash
и используйте _.extend
:
// api/models/MyModel.js
var _ = require('lodash');
var BaseModel = require("../../lib/BaseModel.js");
module.exports = _.merge({}, BaseModel, {
attributes: {
someOtherAttribute: 'integer'
}
};
Атрибуты вашей базовой модели будут объединены с MyModel
, причем MyModel
имеет приоритет.
Установка первого аргумента пустой модели {}
здесь важна; _.merge
является разрушительным для первого отправленного объекта, поэтому, если вы только что сделали _.merge(BaseModel, {...}
, базовая модель будет изменена.
Кроме того, запомните npm install lodash
!