2011-11-08 10 views
2

私は3レベル深くネストすることができるカスタマイズ可能なナビゲーションツリーを持っています。sproutcore2で再帰的コレクションが可能ですか?

テンプレート:

<script type="text/x-handlebars" data-template-name="NavItemView"> 
    <a {{bindAttr href="href" class="content.className"}}>{{content.name}}</a> 
    {{##if content.children}} 
     another collection here? 
    {{/if}} 
</script> 
<script type="text/x-handlebars"> 
    {{collection App.NavItemsCollectionView contentBinding="App.navItemsController" tagName="ul"}} 
    {{view App.CreateLinkView id="new-link" placeholder="Name"}} 
</script> 

データ:

nav =[ 
    { 
     "name": "Jethro Larson", 
     "children":[ 
      { 
       "name":"Dashboard", 
       "href": "index.cfm" 
      } 
     ] 
    }, 
    { 
     "name":"Order Management", 
     "children": 
     [ 
      { 
       "name":"OM Reports", 
       "children": 
       [ 
        { 
         "name":"Status Updates", 
         "href":"index.cfm?blah" 
        } 
       ] 
      } 
     ] 
    } 
]; 

JS:

window.App = SC.Application.create(); 
App.NavItem = SC.Object.extend({ 
    name: null, 
    href: '#', 
}); 
App.navItemsController = SC.ArrayProxy.create({ 
    content:[], 
    addMultiple: function(ar){ 
     that = this; 
     $.each(ar,function(i,item){ 
      that.pushObject(App.NavItem.create(item)); 
     }); 
    } 
}); 
App.NavItemView = SC.View.extend({ 
    tagName:'li' 
    ,templateName: 'NavItemView' 
}); 
App.NavItemsCollectionView = SC.CollectionView.extend({ 
    itemViewClass: App.NavItemView 
}); 
App.navItemsController.addMultiple(nav); 

私はデータ構造にDOMをリンクすることができるように巣のコレクションに方法はありますか?

+0

私はSC2beta3を使用しています –

+0

データストアを使用していますか? – Steffen

答えて

1

これを実現する方法は、「NavItemView」テンプレートにロジックを追加することで、「別のコレクション」と書いた場所に別のコレクションビューを追加するだけです。

これを試してみると、if文の二重ハッシュ文字のためにうまくいかなかったかもしれません。私はすでに階層的な進捗状況で10の入れ子レベルでこれを使用しました。ハンドルバーのテンプレートとして

をハンドルバーテンプレートとして使用してください。

関連する問題