2012-04-10 11 views
0

Ich frage mich, in dem folgenden Beispiel, was wäre der beste Weg zur Wiederverwendung meiner helpers Objekt?Wiederverwendung von Variablen/Objekten in Callbacks

var test = { 
    Projects: 'an object goes here', 
    helpers: require('../helpers'), 

    test: function(req, res) { 
    if (this.helpers.is_post(req)) { 
     // tried this 
     var test = this.helpers; 

     this.Projects.byCode(req.params.project_code, function(project) { 
     if (!project) { 
      this.helpers.flash(req, 'error', 'Unable to find project.'); 
      // tried this 
      helpers.flash(req, 'error', 'Unable to find project.'); 
      res.redirect('/projects'); 
     } 
     }); 
    } 
    } 
}; 

Ich weiß, ich kann nicht wiederverwenden Variablen, Objekte, etc. in Rückrufe da sie nicht in der gleichen Laufzeit ausführen, aber dennoch muss es irgendeine Art von besser/klarer Weg, um eine zu tun, wie zum Ding?

Auch wenn ich this.helpers einer anderen Variablen zuweisen wollte, gibt es mir Fehler, die sagen, dass es nicht definiert ist.

Danke!

Antwort

4

Warum können Sie Variablen in Callbacks nicht erneut verwenden? Sie werden nicht nur in der gleichen Laufzeit, sondern im selben Thread ausgeführt! Das ist die Schönheit von JavaScript.

Stattdessen ist Ihr Problem wahrscheinlich ein Missbrauch von diesem. Zum Beispiel wird es ohne die Zuordnung zu var test = this.helpers definitiv nicht funktionieren. Und auch das wird nicht funktionieren, wenn Sie die Methode aufrufen, etwa so:

var testIt = test.test; 
testIt(req, res); 

Probieren Sie etwas wie das folgende statt:

var helpers = require('../helpers'); 

var test = { 
    Projects: 'an object goes here', 

    test: function(req, res) { 
    if (helpers.is_post(req)) { 
     this.Projects.byCode(req.params.project_code, function(project) { 
     if (!project) { 
      helpers.flash(req, 'error', 'Unable to find project.'); 
      res.redirect('/projects'); 
     } 
     }); 
    } 
    } 
}; 

Es ist wirklich ziemlich unsinnig ein ganzes Modul als eine Eigenschaft setzen Ihrer Objekt sowieso.

+0

Oh ich habe ein Detail vergessen, ich werde mein Code-Beispiel bearbeiten. – TomShreds

+0

Da gehen Sie, meine Frage wird klarer. Vielen Dank! – TomShreds

+0

Oh Gott, das ändert die Antwort total. – Domenic

Verwandte Themen