9

次のように Ember.js でモデルを使用します。

App.SomethingRoute = Ember.Route.extend({
  model: function()
  {
      return App.MyData.find();
  }
});

MyData からデータを受け取ります。私のデータには、「NAME」というフィールドがあります。MyData のデータを NAME の昇順で表示したいと考えています。

次のようなコントローラー(thx。Toran、直感的)を追加しました:

App.SomethingController = Ember.ArrayController.extend({
  sortProperties: ['NAME'],
  sortAscending: true
});

しかし、私のテンプレートは次のようなものです:

{{#each model}}
 {{NAME}}
{{/each}}

まだ順序付けられていないリストを表示します。それを正しくする方法は?

4

4 に答える 4

15

ArrayControllerには(@ianpetzer からのコメントで既に言及されている) が含まれているため、SortableMixin並べ替えたいプロパティを で設定できますsortProperties

App.SomethingController = Ember.ArrayController.extend({
  sortProperties: ['name'],
  sortAscending: true
});
于 2013-07-29T12:01:17.513 に答える
6

コントローラーには、並べ替えてテンプレートに提示するモデル コレクションの独自のコピーがあるため、{{#each モデル}} ではなく、{{#each コントローラー}} を使用していることを確認してください。

<!-- ************************************************************************ -->
<script type="text/x-handlebars" data-template-name="tickets">  
<p>
<table id="tickets" class="table table-striped">
<thead>
  <tr>    
    <th {{action "sortByAttribute" "status"}}>Status</th>
  </tr>
</thead>
<tbody>
{{#each controller}}
    <tr>     
      <td>{{#link-to 'ticket' this.id}} {{status}} {{/link-to}} </td>
    </tr>
{{/each}}
</tbody>
</table>  
</p>
</script>
于 2014-05-13T16:11:06.023 に答える
1
App.SomethingController = Ember.ArrayController.extend({
    sortProperties: ['name'],
    sortAscending: true 
});

あなたのfindメソッドがこのようなことをしていることを確認してください

App.Person.reopenClass({
    people: [],
    find: function() {
        var self = this;
        $.getJSON('/api/people', function(response) {
            response.forEach(function(hash) {
                var person = App.Person.create(hash);
                Ember.run(self.people, self.people.pushObject, person);
            });
        }, this);
        return this.people;
    }
});

これではありません (これは完全な ember オブジェクトではなくバニラ JS オブジェクトであるため、バインディングを介してテンプレートを更新しません)

App.Person.reopenClass({
    people: [],
    find: function() {
        var self = this;
        $.getJSON('/api/people', function(response) {
            response.forEach(function(hash) {
                Ember.run(self.people, self.people.pushObject, hash);
            });
        }, this);
        return this.people;
    }
});
于 2013-07-29T11:59:41.280 に答える