2012-04-10 14 views
0

私はhelpersオブジェクトの再利用を処理する最良の方法は何でしょうか?コールバックで変数/オブジェクトを再利用

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

私は再利用することはできません知っているコールバックでなどの変数、オブジェクトを、彼らは同じ実行時に実行していないが、それでもより良いのいくつかの種類/など行うための明確な方法がなければならないので、もの?

this.helpersを別の変数に再割り当てしようとしても、定義されていないというエラーが表示されます。

ありがとうございます!

答えて

4

なぜコールバック内で変数を再利用できないと思いますか?それらは同じランタイムで実行されているだけでなく、同じスレッドで実行されています!それがJavaScriptの美しさです。

代わりに、この問題を悪用する可能性があります。例えば、var test = this.helpersへの割り当てがなければ、それは間違いなく機能しません。代わりに、次のような何か試してみてください

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

を::

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

をそれはあなたの財産として、モジュール全体を置くことは本当にかなり無意味だし、でも、それはあなたがそうのようなメソッドを呼び出す場合は動作しません。とにかく、オブジェクト。

+0

私は詳細を忘れてしまったので、私のコード例を編集します。 – TomShreds

+0

あなたは行く、私の質問はより明確になります。ありがとう! – TomShreds

+0

ああ、良さそう、これは完全に答えを変えます。 – Domenic