我是Ember的新手,正在使用Ember.js 2.10。我試圖只使用組件而不是控制器。我試圖創建一個組件,創建一個鏈接列表或只是項目的列表,並根據發送的屬性排序或不排序。我有鏈接部分工作,但我似乎無法得到在不重複大量代碼的情況下進行分類工作,這讓我認爲我做錯了什麼。我嘗試將排序邏輯移入計算屬性,但不起作用。如果我沒有指定sortBy
屬性,它仍然會對列表進行排序。如果我確實指定爲sortBy
屬性,我根本沒有得到一個列表,並且console.log顯示作爲ComputedProperty返回的內容。基於if屬性設置的ember.js組件排序模型
這似乎很基本,我不應該這樣做,所以如果有一個Ember的方式做到這一點,我想知道。無論如何,我想了解我在做什麼錯誤的學術價值。
app/components/column-list.js
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'ul',
classNames: ['column-list'],
sortedItems: Ember.computed('items', 'sortBy', function() {
if (this.get('sortBy') !== undefined) {
let sd = [ this.get('sortBy') ];
return Ember.computed.sort(this.get('items'), sd);
} else {
return this.get('items');
}
}),
});
app/templates/components/column-list.hbs
{{#if sortBy}}
{{#each sortedItems as |item|}}
<li>
{{#if link}}
{{#link-to link item.id}}
{{yield item}}
{{/link-to}}
{{else}}
{{yield item}}
{{/if}}
</li>
{{/each}}
{{else}}
{{#each items as |item|}}
<li>
{{#if link}}
{{#link-to link item.id}}
{{yield item}}
{{/link-to}}
{{else}}
{{yield item}}
{{/if}}
</li>
{{/each}}
{{/if}}
app/templates/category/index.hbs
{{#column-list class="categories" sortBy="title" link="category.show" items=model as |i|}}
{{i.title}}
{{/column-list}}
mirage/fixtures/category.js
export default [
{
id: 'main-dishes',
title: 'Main Dishes',
}, {
id: 'cakes-pies-and-sweets',
title: 'Cakes, Pies & Sweets',
}, {
id: 'langappie',
title: 'Langappie',
}, {
id: 'dips-and-sauces',
title: 'Dips & Sauces',
}, {
id: 'meat-dishes',
title: 'Meat Dishes',
}, {
id: 'vegetable',
title: 'Vegetable',
}, {
id: 'seafood-dishes',
title: 'Seafood Dishes',
}, {
id: 'bread-and-cereals',
title: 'Bread & Cereals',
}
];
更新:
我在重組後玩弄的是@Jovica製成,我收到「斷言失敗:排序定義‘sortedItems’上必須是一個函數或字符串數組」,所以我覺得我仍然有錯誤。 Link to twiddle
UPDATE2:
我發現,我在我的玩弄一個錯字,並得到它的正常工作。 new twiddle有正確的修復。現在要弄清楚爲什麼在沒有我詢問的情況下,ember-mirage會訂購數據,但那是一個不同的問題。
歡迎來到Stackoverflow!我建議你寫一個[twiddle](https://ember-twiddle.com/),而不是粘貼一個長代碼。通過這樣做,許多回答者可以玩你的代碼。 – ykaragol
關於控制器,您可能需要閱讀以下文檔:http://emberjs.com/learn/#faq-future-proof https://guides.emberjs.com/v2.11.0/controllers/#toc_common-questions – locks
@鎖我明白,控制器將保持一些變化。此代碼看起來像是組件的完美候選者,因爲它可以在應用程序中重複使用很多次。你不同意嗎?我只是想確保我理解你的評論。 –