【发布时间】:2013-03-03 08:09:46
【问题描述】:
使用 Ember 1.0.0-rc.1,我有一个仅包含 {{outlet}} 的 application 模板。我的 ApplicationView 被明确定义为利用布局和自定义类来实现 CSS 目的:
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 之间来回移动时,内部变质数上升: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}})和一个新的ember-view div。这里发生了什么?为什么显式的 View 定义会导致 DOM 中的不同行为?这是重要的,还是只是 Ember 内部的一些我不应该担心的事情?
【问题讨论】:
标签: ember.js