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

1 に答える 1

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

とにかく、モジュール全体をオブジェクトのプロパティとして配置することは、実際にはかなり無意味です。

于 2012-04-10T17:59:16.350 に答える