#javascript #backbone.js
#javascript #backbone.js
Вопрос:
Есть ли способ отправить базовую коллекцию в другое представление без методов listenTo, отправить ее как массив или что-то еще.
Я выполняю выборку в функции инициализации, а затем помещаю коллекцию в свой массив, это плохо?
this.userModels = [];
this.collectionUser = new app.types.Users();
this.collectionUser.fetch();
this.userModels.push(this.collectionUser);
Я пытаюсь отправить ее как массив, но при обновлении моей веб-страницы иногда я получаю это
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…
}
Итак, я хочу отправить свою коллекцию без метода listenTo, если это возможно.
Первый просмотр:
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.
};
});
Ответ №1:
Да, вы можете отправить все с помощью js и использовать initialize для этого представления. По вашему мнению, вам нужно объявить функцию инициализации следующим образом.
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});
Это оно
Комментарии:
1. Я сделал это, но снова получаю в этом представлении длину null
child {length: 0, models: Array[0], _byId: Object}
.2. В этом случае вам просто нужно передать аргумент collection us и в вашем представлении вызвать colection. выборка()
3. Сейчас я изменю ответ
4. Когда я ссылаюсь на свою веб-страницу, иногда я получаю длину 15, и это длина моей коллекции, а иногда я получаю ноль при обновлении, я не знаю, почему я это получаю.
5. вы получаете это, потому что, когда ваше представление отображает, ваша коллекция не обрабатывается.