2014-01-27 2 views
1

У меня есть вопрос о парусах ЯШАХ:Как я могу написать функцию паруса для использования в контроллере?

  1. Как я могу написать функцию парусов на модели Для использования в Controler? как:
    • beforeValidation/п (значения, CB)
    • beforeCreate/п (значения, CB)
    • afterCreate/п (newlyInsertedRecord, CB)
+0

Не могли бы вы пояснить немного больше, что вы пытаетесь сделать? Три перечисленных вами метода - это обратные вызовы, которые можно добавить в класс модели. – sgress454

ответ

8

Если вы на самом деле пытаетесь использовать один из обратных вызовов жизненного цикла, синтаксис будет выглядеть примерно так:

var uuid = require('uuid'); 
// api/models/MyUsers.js 
module.exports = { 
    attributes: { 
    id: { 
     type: 'string', 
     primaryKey: true 
    } 
    }, 

    beforeCreate: function(values, callback) { 
    // 'this' keyword points to the 'MyUsers' collection 
    // you can modify values that are saved to the database here 
    values.id = uuid.v4(); 
    callback(); 
    } 
} 

В противном случае, есть два типа методов, которые вы можете создать на модели:

  • методы экземпляра
  • методы сбора

Методы, помещенные внутри атрибутов объекта будет «экземпляр методы "(доступно на экземпляре модели). то есть:

// api/models/MyUsers.js 
module.exports = { 
    attributes: { 
    id: { 
     type: 'string', 
     primaryKey: true 
    }, 
    myInstanceMethod: function (callback) { 
     // 'this' keyword points to the instance of the model 
     callback(); 
    } 
    } 
} 

это будет использоваться в качестве таковых:

MyUsers.findOneById(someId).exec(function (err, myUser) { 
    if (err) { 
    // handle error 
    return; 
    } 

    myUser.myInstanceMethod(function (err, result) { 
    if (err) { 
     // handle error 
     return; 
    } 

    // do something with `result` 
    }); 
} 

Методы размещены вне атрибутов объекта, но внутри определения модели являются "методы сбора", то есть:

// api/models/MyUsers.js 
module.exports = { 
    attributes: { 
    id: { 
     type: 'string', 
     primaryKey: true 
    } 
    }, 

    myCollectionMethod: function (callback) { 
    // 'this' keyword points to the 'MyUsers' collection 
    callback(); 
    } 
} 

в метод сбора будет использоваться следующим образом:

MyUsers.myCollectionMethod(function (err, result) { 
    if (err) { 
    // handle error 
    return; 
    } 

    // do something with `result` 
}); 

P.S. комментарии о том, что такое ключевое слово this, предполагают, что вы используете методы обычным способом, т. е. вызываете их так, как я описал в своих примерах. Если вы вызываете их по-другому (т. Е. Сохраняете ссылку на метод и вызываете метод через ссылку), эти комментарии могут быть неточными.

+0

но как я могу получить возвращаемое значение из 'MyUsers.myCollectionMethod();' когда я вызываю это из контроллера, например 'var tmpResult = MyUsers.myCollectionMethod();' –

+0

Я обновил пример метода коллекции, чтобы показать, как вы будете использовать это путем передачи обратного вызова –

Смежные вопросы