2012-11-25 51 views
0

我想弄清楚正確的方式來顯示對象的數組,由對象的唯一'categoryName'屬性索引,但我目前正在嘗試做的方式是按照我的預期行事。顯示索引/排序DS.hasMany

LO.List = DS.Model.extend({ 
    name: DS.attr('string'), 
    items: DS.hasMany('LO.Item'), 

    categoryNames: function() { 
    // return an array of all unique item.categoryNames 
    }.property('[email protected]') 
}); 

LO.Item = DS.Model.extend({ 
    name: DS.attr('string'), 
    categoryName: DS.attr('string') 
}); 

在我的模板中,我試圖遍歷每個categoryName,渲染它,然後呈現該類別中的所有項目。

<ul> 
    {{#each content.categoryNames}} 
     <li> 
      Category: {{this}} 

      Items: {{view LO.ItemsInCategoryView categoryNameBinding="" itemsBinding=""}} 
     </li> 
    {{/each}} 
</ul> 

我做錯了我的綁定到ItemsInCategoryView,因爲我不能讓無論是當前上下文類別名稱或視圖內的項目的整個陣列。

擺弄:http://jsfiddle.net/6ph42/2/

是否有不同的方式,我應該這樣做呢?如果不是,我應該在這裏傳遞哪些綁定?

謝謝!

回答

1

可能有更優雅的方式,但我認爲你必須創建一個新的數據結構來完成你想要的。因此

categories: function() { 
    var categories = [], 
     items = this.get('items'); 

    items.forEach(function(item) { 
    var categoryName = item.get('categoryName'); 

    var category = categories.filterProperty('name', categoryName); 
    if(category.length === 0) { 
     category = Ember.Object.create({name: categoryName, items: []}) 
     categories.addObject(category); 
    }else{ 
     category = category.get('firstObject'); 
    } 
    category.get('items').addObject(item); 
    }); 

    return categories; 
}.property('[email protected]') 

我更新您的jsfiddle:

你可以動態創建它雖然

http://jsfiddle.net/6ph42/3/

+0

酷 - 這應該現在工作。希望有人可以在稍後使用更優雅的解決方案。謝謝! – sheldonbaker

1

我開始使用類別的ArrayController一個更優雅的解決方案的工作(這應該可能是它自己的模型)和sortProperties這個新的CategoriesController(來自Ember.SortableMixin,它被內置到ArrayControllers中。)

LO.CategoriesController = Em.ArrayController.extend({ 
    sortProperties: ['categoryName'], 
    sortAscending: true, 
}); 

我還演示瞭如何在列表視圖中使用插座來將列表類別與列表模板本身分開。這裏還有更多的工作要做,但總的來說,你會發現,你可以將問題分解得更多,並將視圖和模型分解成最小的組件,Ember將開始變得更有意義。

http://jsfiddle.net/hNmBF/1/

對不起,我不能完成,我想,我們要麼需要看你的實際應用中,或清潔劑的例子(儘管我明白,是談何容易,所以我沒有得到上你的情況,我真的很想幫忙)。這在20分鐘內我的腦袋就有點太過分了。

+0

太棒了!這肯定會讓我朝着正確的方向前進。 – sheldonbaker