2013-10-17 15 views
8

Tôi đã thiết lập một mô hình đơn giản với 2 phương pháp thể hiện. Làm thế nào tôi có thể gọi những phương pháp đó trong callbacks vòng đời?Làm thế nào tôi có thể gọi một phương thức mẫu trong cuộc gọi lại vòng đời trong Sails/Waterline?

module.exports = { 

    attributes: { 

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

    // Instance methods 
    doSomething: function(cb) { 
     console.log('Lets try ' + this.doAnotherThing('this')); 
     cb(); 
    }, 

    doAnotherThing: function(input) { 
     console.log(input); 
    } 

    }, 

    beforeUpdate: function(values, cb) { 
    // This doesn't seem to work... 
    this.doSomething(function() { 
     cb(); 
    }) 
    } 

}; 

Trả lời

2

Có vẻ như các phương pháp thể hiện được xác định không được thiết kế để gọi trong vòng đời nhưng sau khi truy vấn một mô hình.

SomeModel.findOne(1).done(function(err, someModel){ 
    someModel.doSomething('dance') 
}); 

Liên kết với ví dụ trong tài liệu hướng dẫn - https://github.com/balderdashy/sails-docs/blob/0.9/models.md#custom-defined-instance-methods

+0

điều này không giải thích làm thế nào bạn có thể làm điều đó. Họ thực sự cần phải xây dựng điều này theo như tôi quan tâm, đó là một trường hợp sử dụng siêu phổ biến. – light24bulbs

2

Cố định chức năng trong javascript thường xuyên, bằng cách này họ có thể được gọi từ toàn bộ tập tin mô hình như thế này:

// Instance methods 
function doSomething(cb) { 
    console.log('Lets try ' + this.doAnotherThing('this')); 
    cb(); 
}, 

function doAnotherThing(input) { 
    console.log(input); 
} 

module.exports = { 

    attributes: { 

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

    beforeUpdate: function(values, cb) { 
    // accessing the function defined above the module.exports 
    doSomething(function() { 
     cb(); 
    }) 
    } 

}; 
+0

Chỉ cần nhận thấy câu hỏi là lớn hơn một chút, hy vọng nó vẫn giúp ai đó vấp ngã nó như tôi đã làm. – danba

1

doSomethingdoAnotherThing không phải là thuộc tính, là các phương thức và phải ở cấp độ gọi lại Vòng đời. Hãy thử một cái gì đó như thế này:

module.exports = { 

    attributes: { 

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

    }, 

    doSomething: function(cb) { 
     console.log('Lets try ' + "this.doAnotherThing('this')"); 
     this.doAnotherThing('this') 
     cb(); 
    }, 

    doAnotherThing: function(input) { 
     console.log(input); 
    }, 

    beforeCreate: function(values, cb) { 

     this.doSomething(function() { 
      cb(); 
     }) 
    } 

}; 

On Vị trí thứ hai, bạn đang cố gắng gửi đến an ủi this.doAnotherThing ('này') nhưng nó là một thể hiện của mô hình nên bạn không thể vượt qua nó như thông số trên chuỗi "Cho phép thử". Thay vì nó cố gắng để thực hiện chức năng này ngoài và sẽ làm việc

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