2013-11-22 2 views
0

Я установил метод «компаратор» в своей коллекции, чтобы я мог сортировать список в коллекции. , но это не влияет на просмотр.Макетная коллекция и сортировка просмотров

'/ апи/примечание/GetList', он возвращает (и это называется, когда коллекция инициализироваться зрения)

[{"id":22,"name":"Test2","isPublic":1},{"id":11,"name":"Test1","isPublic":1},{"id":33,"name":"Test3","isPublic":1}] 

Это моя коллекция,

define [ 
    'models/Note' 
], 
(Note) -> 
    class NoteCollection extends Backbone.Collection 

     model : Note 
     url : '/api/note/getList' 

     initialize:() => 
      _.bindAll @ 
      @.on 'sort', @onSort 

     comparator : (item) -> 
      id = item.get 'id' 
      return id * -1 

     onSort:() => 
      @.each (model) => 
       console.log model.get 'id' 

onSort метод печатает ,

11 
22 
33 

Правильно, но на экране отображается

22 
11 
33 

Это моя точка зрения,

define [  
    'hbs!./noteCollection_tpl' 
    './noteItemView' 
    'collections/NoteCollection' 
], 
(noteCollection_tpl, noteItemView, NoteCollection) -> 
    class NoteCollectionView extends Backbone.Marionette.CompositeView 
     template : noteCollection_tpl 
     itemView : noteItemView 
     itemViewContainer : '.noteListContainer' 
     className : 'noteWrap' 

     initialize : (options) -> 
      @collection = new NoteCollection() 

ли я повторно вынести мнение? если да, то как я могу поймать (что) событие, когда после загрузки URL и весь список будет в коллекцию?

пожалуйста, советую, что я делаю неправильно.

+0

да, вам нужно будет повторно просмотреть представление после сортировки коллекции. извините, я плохо разбираюсь в coffeescript, но в вашем представлении вы можете: this.collection.on ('sort reset', this.render, this); это захватывает события, когда коллекция «перезагружается» (например, после выполнения fetch()) и при сортировке коллекции. –

+0

Я вижу. Спасибо. (BTW, это раздражает работу, чтобы перехватить это событие ..) –

+0

Да, магистраль не имеет привязки данных в представлениях по умолчанию. BTW, если вы используете backbonejs> 1.0. с использованием listenTo лучше. например. в инициализации вашей коллекции: this.listenTo (this.collection, "reset reset", this.render); –

ответ

0

Необходимо визуализировать при сортировке коллекции.

initialize : (options) -> 
    @collection = new NoteCollection() 
    @collection.on 'sort',() => 
     @render() 

Aww, лучше используя 'listenTo', потому что,

Когда представление уничтожается, вызов listenTo автоматически удаляет обработчик событий. Это предотвращает утечку памяти и прослушиватели событий в зомби.

Я полагаю, что использование марионетки решит этих слушателей событий в зомби.

Спасибо Yurui Ray Zhang.

Смежные вопросы