2014-10-20 19 views
10

Điều này thật buồn, làm cách nào để giữ một mô hình lặp lại để tôi có thể lập trình làm việc với nó? Tôi có một mô hình Persisted có tên "Thông báo". Tôi có thể tương tác với nó bằng cách sử dụng trình thám hiểm REST. Tôi muốn có thể làm việc với nó trong máy chủ, tức là Notification.find (...). Tôi thực thi app.models() và có thể thấy nó được liệt kê. Tôi đã làm điều này:Làm thế nào để có được một tổ chức của một mô hình loopback Strongloop?

var Notification = app.models.Notification; 

và nhận được một chất béo lớn "không xác định". Tôi đã làm điều này:

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

và một chất béo lớn khác "chưa xác định".

Xin giải thích tất cả những gì phải làm để có được một tổ chức của một mô hình tôi đã xác định sử dụng:

slc loopback:model 

Cảm ơn trước

+0

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

+0

Có thể hữu ích cho ai đó: nếu bạn truy cập mô hình trước khi nó được "khởi tạo", nó sẽ không xác định. Chỉ cần cố gắng truy cập mô hình từ tập lệnh được đặt trong máy chủ/khởi động. Ví dụ tốt ở đây: http://docs.strongloop.com/display/public/LB/Defining+boot+scripts#Definingbootscripts-Synchronousbootscripts – IvanZh

Trả lời

8

Bạn có thể sử dụng ModelCtor.app.models.OtherModelName để truy cập các mô hình khác từ bạn phương pháp tùy chỉnh.

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

Điều gì sẽ xảy ra nếu bạn không có một hàm tạo mô hình khác trong mã của mình nhưng bạn có một phiên bản ngươi mâu? – JBCP

+1

@JBCP bạn có thể nắm giữ hàm tạo thông qua thuộc tính 'constructor' (thường là). Ví dụ. "productInstance.constructor.app.models.Randomizer". –

+0

Cảm ơn. Nếu tôi có một trường hợp mô hình, có an toàn không khi chỉ cần app.models.OtherModel, vì tôi biết ứng dụng được khởi tạo ngay bây giờ? Đó là những gì tôi đã làm cho đến nay. – JBCP

0

Tôi biết bài đăng này đã ở đây một thời gian dài trước đây. Nhưng kể từ khi tôi có cùng một câu hỏi những ngày gần đây, đây là những gì tôi đã tìm ra với api loopback mới nhất:

bạn có thể lấy ứng dụng mà mô hình của bạn được gắn như sau:

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

Hình như tôi không làm tốt với các định dạng khối mã ở đây ...

Ngoài ra bạn nên cẩn thận về thời gian khi điều này 'getApp' được gọi, nó quan trọng vì nếu bạn gọi phương thức này rất sớm khi khởi tạo mô hình, một lỗi như 'undefined' sẽ xảy ra.

Các vấn đề liên quan