2013-10-17 9 views
8

Ho impostato un modello semplice con 2 metodi di istanza. Come posso chiamare questi metodi nei callback del ciclo di vita?Come posso chiamare un metodo di istanza del modello nella callback del ciclo di vita in 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(); 
    }) 
    } 

}; 

risposta

2

Sembra che i metodi di istanza definiti personalizzati non siano stati progettati per essere richiamati nel ciclo di vita ma dopo aver interrogato un modello.

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

link di esempio nella documentazione - https://github.com/balderdashy/sails-docs/blob/0.9/models.md#custom-defined-instance-methods

+0

questo non spiega come è possibile farlo. Dovrebbero davvero averlo costruito per quello che mi riguarda, è un caso d'uso molto comune. – light24bulbs

2

Prova la definizione delle funzioni in javascript regolare, in questo modo essi possono essere richiamati da tutto il file modello come questo:

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

Appena notato che la domanda era un po 'più vecchia, spero che aiuti ancora qualcuno a inciampare su di esso come ho fatto io. – danba

1

doSomething e doAnotherThing non sono attributi, sono metodi e devono essere al livello di callback del ciclo di vita. Provare qualcosa di simile:

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

}; 

al secondo posto, si sta cercando di inviare a consolare this.doAnotherThing ('questo') ma è un esempio di modello di cui non si può passare come parametro la stringa "Lets try". Invece di cercare di eseguire questa funzione a parte e funzionerà

Problemi correlati