2012-04-10 48 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 2012-04-10 19:38:30

+0

你走了,我的問題會更清楚。謝謝! – TomShreds 2012-04-10 19:46:21

+0

噢,天啊,這完全改變了答案。 – Domenic 2012-04-10 20:27:25