2014-10-20 2 views
10

Это безумие, как я могу зацепиться за петлевую модель, чтобы я мог программно работать с ней? У меня есть модель Persisted с названием «Уведомление». Я могу взаимодействовать с ним, используя REST explorer. Я хочу иметь возможность работать с ним внутри сервера, т. Е. Notification.find (...). Я выполняю app.models() и вижу его в списке. Я сделал это:Как я могу получить модель петли Strongloop?

var Notification = app.models.Notification; 

и получить большой толстый «неопределенный». Я сделал это:

var Notification = loopback.Notification; 
app.model(Notification); 
var Notification = app.models.Notification; 

и еще один большой жир «неопределенный».

Пожалуйста, объясните все, что нужно сделать, чтобы получить в руки моделей я определил с помощью:

slc loopback:model 

Заранее спасибо

+0

См. Https://groups.google.com/forum/#!topic/loopbackjs/Z5VNL5Aw4Cs –

+0

Может быть кому-то полезно: если вы получаете доступ к модели до ее инициализации, она дает неопределенные значения. Просто попробуйте получить доступ к модели из сценария, размещенного в сервере/загрузке. Хороший пример здесь: http://docs.strongloop.com/display/public/LB/Defining+boot+scripts#Definingbootscripts-Synchronousbootscripts – IvanZh

ответ

8

Вы можете использовать ModelCtor.app.models.OtherModelName для доступа к другим моделям от вас пользовательских методов.

/** common/models/product.js **/ 
module.exports = function(Product) { 
    Product.createRandomName = function(cb) { 
    var Randomizer = Product.app.models.Randomizer; 
    Randomizer.createName(cb); 
    } 

    // this will not work as `Product.app` is not set yet 
    var Randomizer = Product.app.models.Randomizer; 
} 

/** common/models/randomizer.js **/ 
module.exports = function(Randomizer) { 
    Randomizer.createName = function(cb) { 
    process.nextTick(function() { 
     cb(null, 'random name'); 
    }); 
    }; 
} 

/** server/model-config.js **/ 
{ 
    "Product": { 
    "dataSource": "db" 
    }, 
    "Randomizer": { 
    "dataSource": null 
    } 
} 
+0

Что делать, если у вас нет другого конструктора модели в вашем коде, но у вас есть экземпляр модель? – JBCP

+1

@JBCP вы можете получить конструктор через свойство 'constructor' (обычно). Например. "ProductInstance.constructor.app.models.Randomizer". –

+0

Спасибо. Если у меня есть экземпляр модели, безопасно ли просто делать app.models.OtherModel, так как я знаю, что приложение уже инициализировано? Это то, что я делал до сих пор. – JBCP

0

Я знаю, что этот пост был здесь давным-давно. Но так как я получил тот же самый вопрос в последние дни, вот что я понял, с последней петлевой API:

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

ModelX.js

module.exports = function(ModelX) { 
 
    //Example of disable the parent 'find' REST api, and creat a remote method called 'findA' 
 
\t var isStatic = true; 
 
\t ModelX.disableRemoteMethod('find', isStatic); 
 

 
\t ModelX.findA = function (filter, cb) { 
 
     
 
     //Get the Application object which the model attached to, and we do what ever we want 
 
\t ModelX.getApp(function(err, app){ 
 
\t if(err) throw err; 
 
\t //App object returned in the callback 
 
\t app.models.OtherModel.OtherMethod({}, function(){ 
 
\t if(err) throw err; 
 
\t //Do whatever you what with the OtherModel.OtherMethod 
 
     //This give you the ability to access OtherModel within ModelX. 
 
     //... 
 
     }); 
 
    }); 
 
\t } 
 
    
 
    //Expose the remote method with settings. 
 
\t ModelX.remoteMethod(
 
\t 'findA', 
 
\t { 
 
\t \t description: ["Remote method instaed of parent method from the PersistedModel", 
 
\t \t \t "Can help you to impliment your own business logic"], 
 
\t \t http:{path: '/finda', verb: 'get'}, 
 
\t \t accepts: {arg:'filter', 
 
\t \t type:'object', 
 
\t \t description: 'Filter defining fields, where, include, order, offset, and limit', 
 
\t \t http:{source:'query'}}, 
 
\t \t \t returns: {type:'array', root:true} 
 
\t \t } 
 
\t); 
 
};

Похоже, я не очень хорошо с форматом блока кода здесь ...

Кроме того, вы должны быть осторожны, о времени, когда это «getApp» дозвонились, это важно, потому что если вы вызовете этот метод очень рано при инициализации модели, произойдет что-то вроде ошибки «undefined».

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