在創建子視圖時,我很難理解區域和容器之間的區別。在父項中創建子視圖時,相互之間的用例是什麼?卓別林地區vs容器和子視圖
其次,作爲子視圖註冊的東西如何與這兩個選項一起工作?這是否需要在使用容器時發生?
在創建子視圖時,我很難理解區域和容器之間的區別。在父項中創建子視圖時,相互之間的用例是什麼?卓別林地區vs容器和子視圖
其次,作爲子視圖註冊的東西如何與這兩個選項一起工作?這是否需要在使用容器時發生?
卓別林的地區和容器非常相似。區域和容器之間的主要區別在於它們附加了視圖。
一個區域是一個抽象的字符串映射,它通過Chaplin Mediator被追加,而一個容器是視圖必須知道的選擇器(傳入或者設置在視圖聲明中)。
在桌別林源代碼(view.coffee線77)。實測值:
區域實際上是旨在解耦從其父視圖 本質命名選擇器。
另一方面,容器只是您傳遞給視圖或直接在視圖上設置的選擇器字符串。
這是在使用一個微妙的差異:
# region is a string mapping
# MyView does not need to know about the associated DOM element
class MyView extends Chaplin.View
region: 'myRegion'
# container is a selector string
# MyView needs to know about the associated DOM element
class MyView extends Chaplin.View
container: 'div#myContainer'
如果區域尚未在視圖試圖連接到它的時候登記的,錯誤將被拋出。
區和集裝箱如何得到實現變得有點棘手:
如果你有一個視圖設置爲true的noWrap
財產,區域元素或容器元素成爲視圖的el
。
但是,如果你有兩個region
和container
宣佈查看的el
屬性首先被設置爲區域元素,則容器元素。最終結果是視圖的el
屬性將被設置爲容器元素。
當涉及到附加視圖,然而,視圖首先嚐試本身附加到其聲明區域。然後它會嘗試附加到容器,如果它不在DOM中。
這意味着如果你同時聲明瞭region
和container
,視圖實際上會被追加到region元素中,並且永遠不會追加到容器元素中。
的源代碼:view.coffee line 443
鑑於這兩種行爲不會是一個視圖同時聲明一個地區,一個容器是一個好主意(至少如果你設置noWrap
爲true)。
要回答你關於一個使用案例超過另一個問題:
在實現這兩個地區和容器的區別是非常微妙的。如果您想將視圖的父元素抽象爲字符串,或者不想將父元素傳遞給視圖實例,那麼區域可能是更好的選擇。另一方面,如果你想更緊密地將你的子視圖耦合到它的父視圖,那麼聲明一個容器可能是更好的選擇。
將視圖實例註冊爲子視圖應該可以工作,無論您選擇哪個選項。
應該注意的是,即使通過容器選項將視圖實例附加到子視圖,也不需要註冊View實例。子視圖只是自動處理的視圖的字符串抽象。