0

Вот это общая структура я прямо сейчас:Backbone: добавление модели из одной коллекции в другую

Коллекция «A», который имеет вид «A»

добавить модель, вы можете открыть модальное и выберите из списка. Модальный - это собственный взгляд, «B», привязанный к своей коллекции «B». представление «B» создается из представления «A» в событии клика.

Я собирался инициализировать вид «B» с атрибутом «myParent» так, когда модель выбрана из коллекции б, я могу сказать, что это изнутри вид B:

this.myParent.collection.add (новая модель).

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

ответ

0

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

В этом случае я пошел на подход, основанный на событиях. Каждый раз при выборе модели из вида А, я огонь событие, которое View B прослушивает и добавляет, что модель в коллекции Б.

Для вашей ситуации, которые могли бы выглядеть примерно так:

// Your collection view. 
 
var ViewA = Backbone.View.extend({ 
 
    
 
    initialize: function(){ 
 
    Backbone.Events.on('modelSelected', this.onModelSelected, this); 
 
    this.listenTo(this.collection, 'add', this.renderList); 
 
    }, 
 
         
 
    onModelSelected: function(model){ 
 
    this.collection.add(model); 
 
    } 
 
    
 
    renderList: function(){ 
 
    // Draw your collection 
 
    } 
 
    
 
    // Do some clean up of events 
 
    remove: function(){ 
 
    Backbone.Events.off('modelSelected', this.onModelSelected, this); 
 
    Backbone.View.prototype.remove.call(this); 
 
    } 
 
    
 
}); 
 
    
 
    
 
// Modal View 
 
var ViewB = Backbone.View.extend({ 
 
    
 
    initialize: function(){ 
 
    this.collection = new YourCollection(); 
 
    this.listenTo(this.collection, 'sync', this.renderCollection); 
 
    this.collection.fetch(); 
 
    }, 
 
    
 
    render: function(){ 
 
    // Render your modal 
 
    return this; 
 
    }, 
 

 
    renderCollection: function(){ 
 
    // Render your collection 
 
    }, 
 
    
 
    // 
 
    modalSubmit: function(){ 
 
    var model = this.getSelectedModel(); 
 
    Backbone.Events.trigger('modelSelected', modal); 
 
    this.close(); 
 
    } 
 
    
 
});

Следует отметить, что это связано с несколькими оговорками. Во-первых, я бы рекомендовал выбрать надежную схему именования событий пространства имен. Это просто пример. Во-вторых, выборка из функции инициализации часто не идеальна, но я оставляю концепцию контроллеров для краткости.