0

私は次のようなAMDモジュールを持っています:

define ['backbone', 'jquery', 'someObj'], (Backbone, $, someObj) ->

  class MyModel extends Backbone.Model
    # some options

  foo = new MyModel
  bar = new MyModel

  foo.fetch().done ->
    # Here I want to do things with foo and bar now that the fetch is complete
    # but they are not visible
    # Backbone, $, someObj, and MyModel are all visible, however

のようなオブジェクトにアクセスできるのに、またはにアクセスできsomeObjないのはなぜですか? また、これは同期コードをシミュレートする正しい方法ではありませんか。promise が解決された後にのみ実行できるコードを実行するには? 基本的に、私はしたい:foobar

  1. インスタンスfoo化し、bar
  2. フェッチfooおよび/またはbarサーバーから
  3. フェッチを待機する必要があるすべてのことをfoo行いますbar

done には、一般的なアクション (例: console.log "Done") を含めるか、promise から渡されたパラメーターにのみアクセスするアクションを含めることができるようです。別のクロージャ構造か何かを使用する必要があると思いますが、やりたいことを行う方法について空白を描いているだけです。(私は AMD モジュールの内部にいるため、これが私だけが経験しているものかどうかはわかりません。そのため、これにも RequireJS のタグを付けています)。

4

1 に答える 1

1

これをhttp://coffeescript.org/のTry Coffeescript REPL に貼り付けます...

define ['backbone', 'jquery', 'someObj'], (Backbone, $, someObj) ->

  class MyModel extends Backbone.Model
    # some options

  foo = new MyModel
  bar = new MyModel

  foo.fetch().done ->
    # Here I want to do things with foo and bar now that the fetch is complete
    # but they are not visible
    # Backbone, $, someObj, and MyModel are all visible, however
    console.log foo, bar

これを生成します:

/*snip boilerplate*/
define(['backbone', 'jquery', 'someObj'], function(Backbone, $, someObj) {
  var MyModel, bar, foo, _ref;
  MyModel = (function(_super) {
    __extends(MyModel, _super);

    function MyModel() {
      _ref = MyModel.__super__.constructor.apply(this, arguments);
      return _ref;
    }

    return MyModel;

  })(Backbone.Model);
  foo = new MyModel;
  bar = new MyModel;
  return foo.fetch().done(function() {
    return console.log(foo, bar);
  });
});

あなたのクロージャfooandにアクセスできるように見えるでしょうbar。したがって、問題がコールバック内の変数アクセスとは異なるものであるかどうかはわかりませんdone

表示されるはずの変数が表示されることを確認するには、ブラウザでコードをデバッグする必要があるようです。

于 2013-06-18T10:44:03.833 に答える