Backbone中父子view之間的值傳遞
backbone中,使用最多的莫過於在view中進行操作,如模板的渲染以及事件函數的定義。為了提高代碼的可維護性,一般地我們會寫多個視圖即view,將界面按照功能的不同進行模塊化劃分,模塊與view一一對應。
首先,我們會定義一個父view,在view中控制不同子view的渲染,子view之間盡量不產生聯繫。這樣,代碼之間的耦合度會降低很多,模塊的功能明確化,同時降低了開發的難度。筆者最近在項目中遇到父子view傳值問題,學習到了一個知識點,比較簡單易懂。主要想分享兩個內容:1.父子view是如何傳值的。2.父子view傳值要注意什麼。以我實際的項目為例進行說明。
一、如何傳值
項目中利用require.js按需載入js文件,大大地節約了資源。首先在global.js中申明子view的路徑,方便在父view中進行引用。熟悉require.js的讀者都知道,require.js是通過define進行函數的定義以及相關依賴模塊的引入,這裡不必細說,假設參數定義為childrenView。在父view中new一個childrenView對象,這樣我們通過自定義事件進行操作就行。此時new的對象包含view的render方法等。如果在new childrenView(參數1)時,參數1可以為空,此時父子view之間沒有值傳遞;當參數2存在時,父子view存在值傳遞,參數1是父view傳遞給子view的。在子view的initialize(參數2)中可以接收參數1,即參數1和參數2是對等的。
此外,因為是在父view中new的子view,可以在父view可以對子view進行操作。
二、細節問題
通過一我們可以很方便在子view中接收父view的數據,但是這裡有個細節問題。我曾在這裡困惑好久。參數最好不要傳父view,即父view的this或者view默認的事件函數等。因為這樣做,參數會將子view默認的事件函數給覆蓋,導致子view相同的事件函數失效。簡單來講,如果父子view都存在的,比如render,events或者其他定義相同的值或者是自定義函數不能作為參數傳遞。
TAG:科技優家 |
※曠視科技提出DetNet:一個為物體檢測而生的Backbone
※用 jest 單元測試改善老舊的 Backbone.js 項目
※南開大學提出目標檢測新Backbone網路模塊:Res2Net