2012-04-27 61 views
1

我現在有很多問題讓我的骨幹代碼工作,現在我升級到backbone.js 0.9.2。我遇到的一個問題是在窗口中重新排列變量。它工作正常,就像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

我猜你$(window).load()處理程序:和

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

會失敗,因爲在範圍未Page被調用時,充其量myAppundefined當您嘗試myApp.model.set()以後。你定義一個Page您的命名空間中:

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

,自this是在這方面想必window,你必須namespace.Page但沒有Page。您將有namespace.Page初始化函數裏面同樣的問題:

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

你必須namespace.PageDisplay但沒有PageDisplay

您應該參考namespace.Pagenamespace.PageDisplay而不是簡單的PagePageDisplay。我還建議您在定義視圖時刪除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) { 

    } 
}); 

然後,您只需創建一個像標準視圖一樣的新視圖。