Как создать «вычисляемые» поля в модели Waterline/Sails.js?

Это моя модель Users.model:

module.exports = {

    attributes: {

        name: {
            type: 'string',
            required: true,
            minLength: 3,
            maxLength: 30
        },

        username: {
            type: 'string',
            required: true,
        },

        toJSON: function() {
          var obj = this.toObject();
          obj.link = sails.config.globals.baseUrl + sails.config.routes.user + obj.id;
          return obj;
        }
    }
  };

Я хочу использовать некоторый атрибут, который «предварительно» рассчитывается в модели. Мое решение состояло в том, чтобы внедрить атрибут в функцию toJSON(), но в представлениях, которые я должен использовать:

<%= users.toJSON().link %> 

Есть способ создать атрибут или какие-то методы для пользователя? Нравиться:

module.exports = {

       attributes: {

        name: {
            type: 'string',
            required: true,
            minLength: 3,
            maxLength: 30
        },
        myPersonalAttribute: function(){
           return "Value"   
        }
}

person Marcelo Boeira    schedule 02.09.2014    source источник
comment
Ваш последний пример с myPersonalAttribute должен работать нормально (отсутствует }). Вы действительно пробовали это?   -  person sgress454    schedule 02.09.2014
comment
Я пробовал, я поставил }, но у меня не получилось. говорит, что метод myPers... не существует.   -  person Marcelo Boeira    schedule 02.09.2014


Ответы (1)


Вы можете использовать методы атрибутов для возврата производных значений. См. мой ответ на вашу проблему с github здесь: https://github.com/balderdashy/waterline/issues/626#issuecomment-54192398

person Travis Webb    schedule 02.09.2014
comment
Я согласен, что это правильно, но разве это не то, что, по словам ОП, они уже делают и по какой-то причине не работают? - person sgress454; 03.09.2014