2012-04-27 3 views
1

backbone.js 0.9.2にアップグレードしたので、私のバックボーンコードを稼働させることにかなりの問題があります。 1つの問題は、ウィンドウ内の変数を参照することです。下のコードのようにうまくいきました。0.5.3バックボーンビューのウィンドウ変数を参照する

this.namespace.blaaaaビットは基本的にネームスペースにオブジェクトを置くためのネームスペースラッパーがあります。私がここにいるのは、ページビュー内にある私のPageDisplayビューの内側からmyAppにアクセスできない理由です。 myAppがウィンドウ変数であると見ると、これを直接呼び出してアクセスする必要はありません。

myApp.js

$(window).load(function() { 
    myApp = new Page({ el: $("body"), scroll: $(window).scrollTop() }); 
}) 

Page.js

this.namespace.Page = Backbone.View.extend({ 
    initialize: function() { 
     this.pageDisplay = new PageDisplay({ 
      el: $("#showBrowser") 
     }); 
    } 
}); 

PageDisplay.js

this.namespace.PageDisplay = Backbone.View.extend({ 
    initialize: function() { 
     myApp.model.set("bla"); 
    } 
}); 

答えて

2

私はあなた推測したいですハンドラ:それが呼び出されたときに何Pageがスコープ内に存在しないため

$(window).load(function() { 
    myApp = new Page({ el: $("body"), scroll: $(window).scrollTop() }); 
}) 

失敗すると、あなたが後でmyApp.model.set()しようとするとせいぜい、myAppundefinedになります。

this.namespace.Page = Backbone.View.extend({ /*...*/ }); 

thisは、おそらくその文脈で windowているので、あなたは namespace.Pageが、何の Pageを持っていないと思います:あなたは、あなたの名前空間内の Pageを定義します。あなたは namespace.PageDisplayが、無 PageDisplayを持っています

this.pageDisplay = new PageDisplay({ 
    el: $("#showBrowser") 
}); 

:あなたはnamespace.Page初期化関数内の同じ問題を抱えているだろう。

PagePageDisplayの代わりにnamespace.Pagenamespace.PageDisplayを参照してください。また、ビューを定義する際には、thisを削除することをお勧めします。混乱の原因となり、バグのウィンドウを開きます。

0

私はビューとしてウィンドウを持っています、それはそれが何であるかのようです。ウィンドウの場合と同じ振る舞いをしますが、レンダリングメソッドは必要ありません(誰かが考えることができない限り)。こうすることで、ウィンドウを離れて戻ったり、ウィンドウ全体をサイズ変更したりするために、これらのイベントを実行できます。ここで私は何をしたのですか:

var WindowView = Backbone.View.extend({ 
    "el": window, 
    "events": { 
     "resize": "onResize" 
     "focus": "onFocus" 
     "blur": "onBlur" 
    }, 
    "onResize": function (ev) { 

    }, 
    "onFocus": function (ev) { 

    }, 
    "onBlur": function (ev) { 

    } 
}); 

次に、標準ビューのように新しいビューを作成します。