2016-10-20 2 views
1

Есть ли все равно, чтобы отправить базовую коллекцию в другое представление без методов listenTo, чтобы отправить ее как массив или что-то еще.Как отправить коллекцию другому виду?

Я делаю выборку в функции initialize, а затем помещаю коллекцию в свой массив, это плохо?

this.userModels = []; 

this.collectionUser = new app.types.Users(); 
this.collectionUser.fetch(); 

this.userModels.push(this.collectionUser); 

Im пытается отправить его как массив, но на освежающий мою веб-страницу, иногда им получать эту

this.options child { 
    length: 15, 
    models: Array[15], 
    _byId: Object, 
    _listenId: "l4", 
    _events: Object… 
} 

и иногда получают с нулевыми значениями

this.options child { 
    length: 0, 
    models: Array[0], 
    _byId: Object, 
    _listenId: "l4", 
    _events: Object… 
} 

Так я хочу послать мои сбор без прослушивания. Если это возможно.

Первый вид:

app.types.FirstView = Backbone.View.extend({ 

    initialize: function() { 
    this.collectionUser = new app.types.Users(); 
    this.collectionUser.fetch(); 
    }; 

    sendCollection: function() { 
    var secondView = new app.types.SecondView({ 
     collection: this.collectionUser 
    }); 
    } 
}); 

Второй вид:

app.types.SecondView = Backbone.View.extend({ 

    initialize: function(options) { 
    this.collection = options.collection; 

    // so i want to get this.collectionUser here without listenTo 
    // method and without fetch here is that possible ? I said 
    // sometimes i get it sometimes not when i refersh my web page 
    // when i render it first time. 
    }; 

}); 

ответ

2

Да, вы можете отправить все с JS и использовать для инициализации этой точки зрения. На ваш взгляд вам нужно объявить функцию инициализации следующим образом.

var someView = Backbone.View.extend({ 
    template: _.template('some html file'), 
    initialize: function(options){ 
     this.collection = options.collection 
    }, 
    events: { 
     'click .someclass': 'doSomthing', 
     'click #someId': 'doSomthingElse' 
    }, 
    doSomthing: function(event){ 
     event.preventDefault(); 
     var that = this; 
     that.collection.fetch({ 
      success: function(){ 
       that.$('element').append(that.collection); 
      } 
     }); 
    }, 
    render: function(){ 
     var that = this; 
     that.$el.html(that.template); 
     return this; 
    } 
}); 

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

this.collectionUser = new app.types.Users(); 
this.view = new someView({collection: this.collectionUser}); 

Это он

+0

Я сделал это, но опять-таки им получить в этой длины вида нуль 'ребенок {длина: 0, модели: Array [0], _byId: Object}'. – lorenos

+1

В этом случае вам просто нужно передать коллекцию аргументов и, на ваш взгляд, вызвать colection.fetch() –

+0

Теперь я изменю ответ –

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