2014-10-20 15 views
10

To jest denerwujące, w jaki sposób uzyskać uchwyt modelu pętli zwrotnej, dzięki czemu mogę programowo z nim pracować? Posiadam model oparty na trwałej nazwie "Powiadomienie". Mogę wchodzić z nim w interakcję za pomocą eksploratora REST. Chcę móc pracować z nim na serwerze, np. Notification.find (...). Wykonuję app.models() i widzę to na liście. Zrobiłem to:Jak uzyskać model pętli zwrotnej Strongloop?

var Notification = app.models.Notification; 

i uzyskać duży tłuszcz "niezdefiniowany". Zrobiłem to:

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

i inny duży tłuszcz "niezdefiniowany".

Proszę wyjaśnić wszystko, co mam zrobić, żeby się trzymać z modelu I zdefiniowanego przy użyciu:

slc loopback:model 

góry dziękuję

+0

Zobacz https://groups.google.com/forum/#!topic/loopbackjs/Z5VNL5Aw4Cs –

+0

Może być przydatna dla kogoś: jeśli uzyskasz dostęp do modelu, zanim zostanie "zainicjowany", otrzymasz wartość niezdefiniowaną. Po prostu spróbuj uzyskać dostęp do modelu ze skryptu umieszczonego w serwerze/rozruchu. Dobry przykład tutaj: http://docs.strongloop.com/display/public/LB/Defining+boot+scripts#Definingbootscripts-Synchronousbootscripts – IvanZh

Odpowiedz

8

Można użyć ModelCtor.app.models.OtherModelName dostęp do innych modeli z was niestandardowych metod.

/** 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

Co zrobić, jeśli nie masz innego konstruktora modelu w kodzie, ale masz instancję model? – JBCP

+1

@JBCP można uzyskać konstruktora za pośrednictwem właściwości 'constructor' (zwykle). Na przykład. "productInstance.constructor.app.models.Randomizer". –

+0

Dzięki. Jeśli mam instancję modelu, czy bezpiecznie jest po prostu zrobić app.models.OtherModel, ponieważ wiem, że aplikacja jest już zainicjowana? Właśnie to robiłem do tej pory. – JBCP

0

Wiem, że ten post był tu dawno temu. Ale ponieważ mam to samo pytanie ostatnie dni, oto co ja zorientowali się z najnowszym API sprzężenia zwrotnego:

można uzyskać aplikację, która dany model został załączony w następujący sposób:

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); 
 
};

Wygląda na to, że nie robię dobrze z formatem bloku kod tutaj ...

Również należy być ostrożnym co do terminu, kiedy to „getApp” się nazywa, jest to ważne, ponieważ jeśli wywołasz tę metodę bardzo wcześnie podczas inicjowania modelu, pojawi się coś takiego jak błąd "niezdefiniowany".