2013-07-29 31 views
9

böyle ember.js bir model kullanın:Model Ember.js'de nasıl sıralanır?

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

O MyData gelen verileri alır. Verilerimde "NAME" adlı bir alan var. Verileri MyData'dan NAME tarafından artan sırayla görüntülemek istiyorum. Böyle bir denetleyici (. Sezgisel thx Toran,) ekledik

: böyledir

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

Ama şablonu:

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

Yine sırasız listesini gösterir. Nasıl doğru yapılır?

+0

http://emberjs.com/api/classes/Ember.SortableMixin.html – ianpetzer

+0

Bulma yönteminizin uygulanmasını gösterebilir misiniz? Çalışmaya başlayamadığım için, soruları güncellediğim –

cevap

15

ArrayController, SortableMixin'u (@ianpetzer adresinden daha önce bahsedilen) içerdiğinden, sıralamak istediğiniz özellikleri ayarlayabilirsiniz. sortProperties.

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

Soruyu güncelledim çünkü işe yaramayacağım. Lütfen yardım et. Teşekkürler.! –

+0

@tomaszs, uygulamanızda işe yaramayan başka bir şey olmalı, kurulumunuzla ilgili bir jsbin/jsfiddle ile sorularınızı güncelleyebilir misiniz? – intuitivepixel

+7

cevabınız bana yardımcı oldu, ben de {{#each model}} - {{#each controller}} olarak değiştirmem gerekiyordu. thx –

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

sizin bulmak yöntem bu

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; 
    } 
}); 

değil bu (yerine tam şişmiş kor nesnenin bir vanilya JS nesne çünkü bu bağlayıcı aracılığıyla şablonu güncellemek olmaz)

böyle bir şey yapar emin olun
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; 
    } 
}); 
+0

no'lu uçta yeniden sıralayacak bağlayıcı davranışı elde etmek için (basit JS nesneleri değil) ember nesneleri kullanmanız gerekir. Lütfen yardım et. Teşekkürler. –

6

kullandığınız emin olun {{#each kontrolör}}, değil {{#each modeli}}, Kontrolör o sıralar ve şablon sunduğu modeli koleksiyonun kendi kopyasına sahip olacağından.

<!-- ************************************************************************ --> 
<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> 
17

ArrayController bu soru sorulmuştur beri Ember (v2.0) kaldırıldı. Sonra

export default Ember.Controller.extend({ 
    sortProperties: ['name:asc'], 
    sortedModel: Ember.computed.sort('model', 'sortProperties') 
}); 

Ve: Kor en bilgisayarlı sort makro için

{{#each sortedModel as |thing|}} 
{{thing.name}} 
{{/each}} 

Ve here is the documentation Burada bir ArrayController kullanmadan aynı başarmak şekli şöyledir.

+1

Sıralama sırasını değiştirirsem ne olur? Modeller nasıl yeniden verilir? – Meliborn