2015-06-18 3 views
2

Я показываю табличный вид, используя композитный вид Marionette. Шаблон составного представления имеет tbody с инициалом, который показывает анимацию загрузки gif.Каков правильный способ переопределения рендеринга композиций Marionette

Теперь, когда вызывается метод визуализации, я хочу удалить эту начальную строку, а затем добавить результаты извлечения коллекции. Однако по умолчанию рендеринг реализации Marionette, похоже, добавляется к телу.

Мой шаблон элемента для просмотра элемента:

<td><input type="checkbox" class="checkboxContact" id="<%-id %>"/></td> 
<td><%-name %></td> 
<td> <%-msisdn %></td> 
<td> <%-email %></td> 
<!-- 
<td> <%-address %></td> 
<td> <%-last_modified_time %></td>--> 
<td> 
    <i rel="tooltip" class="fa fa-pencil-square-o actions" id="editIcon" title="edit"></i> 
    <i rel="tooltip" class="fa fa-trash-o actions" title="delete"></i> 
</td> 

переопределенном метод отрисовки, как показано ниже.

render: function() { 
    if (this.collection.size() <= 0) return; 

    this.$el.html(this.template((this.collection.toJSON())); 
    return this; 
} 

Я также попытался

render: function() { 
    if (this.collection.size() <= 0) return; 

    this.$el.html(this.template({ 
    collection: this.collection.toJSON() 
    })); 
    return this; 
} 

Ни одна из этих работ.

ответ

2

Я не думаю, что вы должны переопределить визуализацию. Марионетта знает, как делать вещи. Я бы подумал об изменении того, как вы применяете счетчик.

Вы можете поставить спиннера OnShow и выключить его после сбора синхронизирует https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.compositeview.md#events-and-callbacks

Когда коллекция обновляет ваш взгляд будет засавить. Вы можете слушать before:render:collection и уничтожить строку в этой точке, если хотите.

+0

это работает. Thx для предложения. –

2

Если вы используете CompositeView, вы можете просто определить:

childViewContainer: "tbody" 

в compositeview, а содержание должно быть заменено.

Также, когда вы используете составной просмотр, вам не нужно вручную вызывать/определять рендер. Просто передать коллекцию Backbone в представлении следующим образом:

var compview = new CompView({ collection: bb_collection }); 

Затем сделать его помощью область:

var region = new Marionette.Region({el: "#somediv"}); 
region.show(compview); 
Смежные вопросы