2013-07-11 74 views
2

我想在Ember中實現項目列表/項目細節模式,但細微差別在於細節視圖必須出現在所選項目旁邊。例如:如何獲取來自控制器或視圖的路線的當前模型?

<ul> 
    <li><div>Post 1<div></li> 
    <li><div>Post 2<div></li> 
    <li><div>Post 3<div></li> 
    <li> 
     <div>Post 4<div> 
     <div> 
      <ul> 
       <li>Comment 1</li> 
       <li>Comment 2</li> 
       <li>Comment 3</li> 
      </ul> 
     </div> 
    </li> 
    <li><div>Post 5<div></li> 
</ul> 

我試圖把手模板是:在「灰燼

App.PostController = Em.ObjectController.extend({ 
    isSelected: function() { 
     return this.get('content.id') === /* what to put here? */; 
    } 
}); 

什麼我堅持用是如何實現isSelected

<script type='text/x-handlebars' data-template-name='posts'> 
    <ul> 
     {{#each model}} 
      {{#linkTo 'post' this}} 
       <div>{{title}}</div> 
      {{/linkTo}} 
      {{#if isSelected}} <!-- How to implement isSelected ? --> 
       <div>{{!-- render selected post's comments --}}</div> 
      {{/if}} 
     {{/each}} 
    </ul> 
</script> 

我想這在控制器'-辦法?我正朝着正確的方向嗎?

+0

通過點擊您想要顯示它的評論後我我給你? –

+0

是的,我想顯示評論和其他帖子的詳細信息。 – Tair

回答

3

您正處於正確的軌道上。訣竅是使用不同的控制器來包裝項目清單中的產品與項目細節。因此,通過指定車把{{each}}助手應包裝在ListedProductController

{{#each model itemController="listedProduct"}} 

每個條目現在定義ListedProductController,加入isSelected功能你會被寫入開始。現在它可以通過needs陣列引用單例ProductController,將路由器設置的產品與列出的產品進行比較。

App.ProductController = Ember.ObjectController.extend({}); 
App.ListedProductController = Ember.ObjectController.extend({ 
    needs: ['product'], 
    isSelected: function() { 
    return this.get('content.id') === this.get('controllers.product.id'); 
    }.property('content.id', 'controllers.product.id') 
}); 

我已經張貼在這裏工作的例子:http://jsbin.com/odobat/2/edit

+0

OMG,這個工程,但它是非常令我困惑。你有沒有參考挖掘更多? – Tair

+0

這是一篇可能相關的文章 - http://blog.gaslight.co/post/54512786990/intermediate-ember-controller-concepts –

相關問題