使用Ember 1.0.0-rc.1,我有一個application
模板,它只包含{{outlet}}
。我ApplicationView被明確定義,以充分利用佈局和自定義類的對CSS的目的:爲什麼Ember對於明確定義的視圖有不同的行爲?
define ["ember"], (Ember) ->
ApplicationView = Ember.View.extend
classNames: ["application"]
layoutName: "layout"
ApplicationView
我有我的路由器設置爲與兩條路線;稱它們爲tab1
和tab2
,並與模板名稱匹配。我沒有明確定義視圖或控制器,但是,寧願利用Ember的「魔力」。我的期望是,當路由器轉到/tab1
時,tab1
模板將渲染到ApplicationView的{{outlet}}
;與/tab2
相同。
當我運行應用程序時,TAB1模板確實渲染和元素看起來像這樣:
<body class="ember-application">
<div id="ember229" class="ember-view application">
<div class="navbar navbar-inverse navbar-fixed-top">...</div> <!-- layout -->
<div class="wrapper"> <!-- layout -->
<script id="metamorph-1-start" type="text/x-placeholder"></script>
<script id="metamorph-0-start" type="text/x-placeholder"></script>
Tab 1 Content
<script id="metamorph-0-end" type="text/x-placeholder"></script>
<script id="metamorph-1-end" type="text/x-placeholder"></script>
etc.
正如我來回移動/tab1
和tab2
,內部的Metamorph數上升之間:0, 2,3,4,等等。接下來,我明確定義Tab1View這樣的:
define ["ember"], (Ember) ->
Tab1View = Ember.View.extend
templateName: "tab1"
Tab1View
我預期這將等同於隱含的「魔力」,因爲我沒有做什麼特別特殊的位置,一切都顯示相同。然而,DOM元素不一樣了:
<body class="ember-application">
<div id="ember229" class="ember-view application">
<div class="navbar navbar-inverse navbar-fixed-top">...</div>
<div class="wrapper">
<script id="metamorph-0-start" type="text/x-placeholder"></script>
<div id="ember265" class="ember-view">
Tab 1 Content
</div>
<script id="metamorph-0-end" type="text/x-placeholder"></script>
etc.
現在只有一個(代表{{outlet}}
,我假設)集的Metamorph元素和新的ember-view
股利。這裏發生了什麼?爲什麼顯式視圖定義會導致DOM中的不同行爲?這是重要的還是Ember內部的東西,我不應該擔心?
我能理解但我不明白的是爲什麼當Ember隱式處理視圖時不會出現'ember265' div,以及爲什麼額外的變形在第二種情況下會消失。它引導我懷疑,通過明確定義視圖,我是否以某種重要方式改變了行爲。我預計這兩種情況會導致相同的DOM。 – neverfox 2013-03-03 20:12:43
上面增加了更多意見。 – ahmacleod 2013-03-03 23:07:48