2012-04-01 24 views
3

我曾經是能夠做這樣的事情來獲得項目的嵌套的無序列表:遞歸視圖升級爲灰燼後的模板不工作0.9.6

的Javascript:

App.Menu = Em.View.extend({ 

    controller: App.menuController.create({}), 

    tagName: 'ul', 

    templateName: 'Menu', 

    pageBinding: 'controller.page' 

}); 

車把:

<li> 
    {{page.menuTitle}} 
    {{#each page.childrenPages}} 
     {{view App.Menu pageBinding="this"}} 
    {{/each}} 
</li> 

的index.html:

<script type="text/x-handlebars"> 
    {{view App.Menu}} 
</script> 

現在在更新到最新的Ember.js(0.9.6)後,只顯示任何給定物品集合中的最後一個物品(作爲<ul>內的一個<li>)。在之前版本的Ember中,顯示了一個嵌套的<ul>/<li>列表,其中包含給定集合的所有項目。

我認爲,不是每次通過{{#each}}創建新的App.Menu視圖,現有視圖只是被重用......關於如何實現類似於舊行爲的任何想法?

回答

2

我認爲問題在於,通過在類App.Menu內創建controller,控制器屬性對於每個具體實例App.Menu都是相同的,請參閱Understanding Ember.Object

我搬到綁定到特定的控制器從視圖類的和它的作品,看到http://jsfiddle.net/pangratz666/DgG9P/

把手

<script type="text/x-handlebars" data-template-name="Menu" > 
    <li> 
     {{page.menuTitle}} 
     {{#each page.childrenPages}} 
      {{view App.Menu pageBinding="this"}} 
     {{/each}} 
    </li> 
</script> 

<script type="text/x-handlebars"> 
    {{view App.Menu pageBinding="App.mainPage" }} 
</script> 

的JavaScript

App = Ember.Application.create({}); 

App.Menu = Em.View.extend({ 
    tagName: 'ul', 
    templateName: 'Menu' 
}); 

App.mainPage = Ember.Object.create({ 
    menuTitle: 'main page', 
    childrenPages: [Ember.Object.create({ 
     menuTitle: 'subtitle 1', 
     childrenPages: [Ember.Object.create({ 
      menuTitle: 'subtitle 1 - child 1' 
     })] 
    }), Ember.Object.create({ 
     menuTitle: 'subtitle 2', 
     childrenPages: [Ember.Object.create({ 
      menuTitle: 'subtitle 2 - child 1' 
     })] 
    })] 
});​ 
+0

是的,你的權利。謝謝!我特意只需要MenuController的一個實例,因爲它可以獲取爲整個站點構建菜單所需的所有頁面信息,避免了進行多個查詢的開銷。在你幫助我理解發生了什麼之後,我可以通過向視圖添加一個循環變量來放置控制器(它只能實例化一次並且被所有視圖共享),該循環變量包含#each每個頁面的實例迭代。 – mike 2012-04-02 06:52:54

+1

任何人都可以使這項工作rc1? – RyanJM 2013-02-20 03:07:48

+0

@ kingpin2k我得到了同樣的問題,但它不工作在ember.js 1.2.0 – magicshui 2013-12-19 15:10:24