2013-03-03 39 views
3

使用Ember 1.0.0-rc.1,我有一個application模板,它只包含{{outlet}}。我ApplicationView被明確定義,以充分利用佈局和自定義類的對CSS的目的:爲什麼Ember對於明確定義的視圖有不同的行爲?

define ["ember"], (Ember) -> 
    ApplicationView = Ember.View.extend 
    classNames: ["application"] 
    layoutName: "layout" 

    ApplicationView 

我有我的路由器設置爲與兩條路線;稱它們爲tab1tab2,並與模板名稱匹配。我沒有明確定義視圖或控制器,但是,寧願利用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. 

正如我來回移動/tab1tab2,內部的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內部的東西,我不應該擔心?

回答

1

視圖代表一個實際的DOM元素,默認爲div。當您給Tab1自己的視圖並將其附加到DOM時,Ember必須實際插入一個新標籤來表示它。這就是你在html最後一塊看到的ember265標籤。您可以更改視圖的tagName屬性的標記類型,但不能省略它。

編輯:

是灰燼創建的虛擬視圖隱含的觀點。它們實際上具有真實的isVirtual屬性,不會呈現爲元素,並且不能通過parentViewchildViews訪問。任何車把綁定也是如此。有一些信息in the guide。您還可以在the code中看到Ember._Metamorph如何將Ember._MetamorphView定義爲虛擬且無標籤。

+0

我能理解但我不明白的是爲什麼當Ember隱式處理視圖時不會出現'ember265' div,以及爲什麼額外的變形在第二種情況下會消失。它引導我懷疑,通過明確定義視圖,我是否以某種重要方式改變了行爲。我預計這兩種情況會導致相同的DOM。 – neverfox 2013-03-03 20:12:43

+0

上面增加了更多意見。 – ahmacleod 2013-03-03 23:07:48

相關問題