0

ビューをセットアップして初期化するために.extend()を試しています。階層の奥深くにネストされたビュー オブジェクトに構成変数を割り当てると便利であることがわかりました。

私の問題は、ビューがこのコンテキストを失うことです。これは、私がコンストラクターであると想定している ctor オブジェクトになります。どうすればこれを修正できますか?

私のコーヒースクリプトは以下です。最初のクラスはツリーの奥深くにネストされ、2 番目のクラスはアプリケーションが起動する最上位レベルにあります。

# This is a child somewhere deep within a tree of views.
class View extends Backbone.View
  initialize: ->
    console.log @ # returns object ctor

MyView = View.extend({
  initialize: ->
    # do config stuff then init prototype
    App.Views.MyView.prototype.initialize()
})

view = new MyView
4

2 に答える 2

4

2つのこと:

まず、それほど重要ではありませんが、使用できます

class MyView extends View

の代わりにView.extend。CoffeeScript クラスと Backbone クラスは相互運用可能です。

第二に、これが重要な部分です。

App.Views.MyView.prototype.initialize()

単純に CoffeeScript キーワードを使用する必要があります

super

これは事実上同じことを行いますが、関数が正しいコンテキストで呼び出されることも保証します。おまけ: また、すべての関数引数を渡してくれます。

興味がある場合は、superここにコンパイルします

initialize.__super__.constructor.apply(this, arguments)

(__super__は両方の CoffeeScript によって設定されたスーパークラスへの参照ですextends)。apply MDN で読んでください。

于 2012-06-09T15:03:06.283 に答える
0

私のcoffeスクリプトはそれほどホットではありませんが、最初のパラメーターとして、この値になりたいビューを送信する関数を呼び出すことができますか?

私は標準的なjsで推測します

 var view = null;
 MyView = View.extend({
   initialize: function() {
    // do config stuff then init prototype
     App.Views.MyView.prototype.initialize.call(view)
    }
 })
 view = new MyView;

その時点で何にアクセスできるか、または生成されたjsもわかりません。重要なのは、関数を呼び出すときにこれの値にアクセスできる場合は、それを渡すことができるはずです。

私は自分自身をチェックしますが、私はコーヒースクリプトを理解していません:)

于 2012-06-09T13:11:59.147 に答える