2013-10-17 5 views
8

मैंने 2 उदाहरण विधियों के साथ एक साधारण मॉडल स्थापित किया है। मैं उन तरीकों को जीवन चक्र कॉलबैक में कैसे कॉल कर सकता हूं?मैं सेल/वॉटरलाइन में लाइफसाइक्ल कॉलबैक में मॉडल इंस्टेंस विधि कैसे कॉल कर सकता हूं?

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

}; 

उत्तर

2

ऐसा लगता है कि कस्टम परिभाषित उदाहरण विधियों को जीवन चक्र में नहीं बुलाया गया था लेकिन मॉडल पूछने के बाद।

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

दस्तावेज में उदाहरण के लिए लिंक - https://github.com/balderdashy/sails-docs/blob/0.9/models.md#custom-defined-instance-methods

+0

काम करेगा यह आपको यह नहीं बताता कि आप इसे कैसे कर सकते हैं। जहां तक ​​मुझे चिंतित है, उन्हें वास्तव में इसे बनाना चाहिए था, यह एक सुपर आम उपयोग केस है। – light24bulbs

2

नियमित जावास्क्रिप्ट में कार्यों को परिभाषित करने का प्रयास करें, इस तरह से वे इस तरह पूरे मॉडल फ़ाइल से कहा जा सकता है:

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

बस ध्यान दिया कि सवाल थोड़ा पुराना था, उम्मीद है कि यह अभी भी किसी ने उस पर ठोकर खाएगा जैसा मैंने किया था। – danba

1

DoSomething और doAnotherThing विशेषताएँ नहीं हैं, विधियां हैं और लाइफसाइक्ल कॉलबैक स्तर पर होना चाहिए। कुछ इस तरह का प्रयास करें:

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

}; 

दूसरा स्थान पर, आप ('इस') this.doAnotherThing सांत्वना देने भेजने की कोशिश कर रहे हैं लेकिन यह मॉडल का एक उदाहरण है, ताकि आप पर पैरामीटर जैसे कि यह पारित नहीं हो सकता "कोशिश करने की कोशिश करो" स्ट्रिंग। इसके बजाय इस समारोह को अलग करने का प्रयास करें और

संबंधित मुद्दे

 संबंधित मुद्दे