Emberを初めて使用し、Ember.js 2.10を使用しています。私はコントローラの代わりにコンポーネントを使用しようとしています。私は、リンクまたは単なるアイテムのリストで、ソートされているか、送られたプロパティに基づいてソートされていないリストを作成するコンポーネントを作成しようとしています。リンク部分は動作していますが、私は何か間違っていると思うように多くのコードを繰り返さずに作業を並べ替えます。私は、ソートロジックを計算されたプロパティに移動しようとしましたが、動作しません。 sortBy
プロパティを指定しない場合でも、リストはソートされます。 sortBy
プロパティを指定すると、リストが表示されず、console.logにComputedPropertyとして返される内容が表示されます。ember.jsコンポーネントのソートモデルがifプロパティに基づいて設定されています
これは基本的なことではありません。私はこれを行う必要はありません。もし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』のソート定義アサーションに失敗しました」を取得していますという責めをtwiddledまだ何かが間違っています。 Link to twiddle
アップデート2:
私は私の責めにタイプミスを持っていたし、それが正常に動作してしまったことがわかりました。 new twiddleには正しい修正があります。今私は尋ねることなくエバーミラージュがデータを注文する理由を理解することができますが、それは別の問題です。
ようこそ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
@ロック私はいくつかの変更を残してコントローラが残っていることを理解します。このコードは、アプリケーションで何度も再利用できるため、コンポーネントの最適な候補のようでした。あなたは同意しますか?私はちょうど私があなたのコメントを理解していることを確認したい。 –