2014-09-11 5 views
0

Интересно, если это возможно передать несколько коллекций в целях раз неправдоподобным, что-то вроде:впрыснуть кратные коллекции в представление (шаблон) BackboneJS

Collection1 = new Collections.Collection(); 
Collection1.fetch({ 
    success: function (collection) { 
     //save it somewhere 
    } 
}); 

Collection2 = new Collections.Collection(); 
Collection2.fetch({ 
    success: function (collection) { 
     //save it somewhere 
    } 
}); 

Так как только они загружаются ... делают мой взгляд (который также, Idk, как подождать, пока оба будут извлечены, поэтому любая помощь будет оценена).

var template = _.template($('#myTemplate').html(), { col1: collection1, col2 : collection2 }) ; 

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

Спасибо, тонна вперед!

ответ

1

Да, вы можете, если ваш шаблон готов к работе с col1 и col2, загружать обе коллекции в представлении, и слушатели событий установки, так что вы вновь сделать, когда любой из них готов:

var MyDoubleColView = Backbone.View.extend({ 
    initialize: function(options){ 
    this.firstCollection = new Collections.Collection(); 
    this.secondCollection = new Collections.Collection(); 
    this.listenTo(this.firstCollection, "reset", this.render); 
    this.listenTo(this.secondCollection, "reset", this.render); 

    this.firstCollection.fetch({reset:true}); 
    this.secondCollection.fetch({reset:true}); 
    }, 
    render: function(){ 
    var template = _.template($('#myTemplate').html(), 
     { col1: this.firstCollection.toJSON(), col2 : this.secondCollection.toJSON() }) ; 
    } 
}); 

Это приведет к повторному отображению вашего представления, когда какая-либо из коллекций будет увлажнена с сервера. Я использовал событие reset, но вы можете использовать любые другие события, связанные с сборкой, например sync.

Подготовьте свой шаблон к пустой коллекции, и вам будет хорошо. :)

+0

он работал как шарм, вы хороший человек, Чарли Браун! спасибо тонну – andresmijares25

2

Backbone .fetch возвращает объект обещания, вы можете использовать $.when

$.when(firstCollection.fetch(), secondCollection.fetch()).then(function() { 
    //both are fetched 
}); 
+0

спасибо тонну человека! – andresmijares25

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