В моем магистральном приложении, у меня есть модель, которая выглядит немного как это,Backbone события изменения не стреляя, когда некоторые атрибуты меняются
{
"id" : 145,
"name" : "Group Number 1",
"information" : "Some kind of blurb about group number 1",
"members" : {[
"id" : 1,
"first_name" : "John",
"last_name" : "Doe",
"email" : "[email protected]"
]}
}
Теперь, если я бег this.model.get('members').add(newUser)
новый пользователь будет добавлен в коллекцию членов в моей модели - однако она не запускает событие изменения, почему это? Купите все же, если я изменю имя модели, то происходит событие изменения?
Все это делается с целью, которая выглядит так,
вид Индивидуальная модель
Views.OrganisationView = Backbone.View.extend({
tagName: 'div',
className:'group group--panel col-sm-3',
template : _.template($('#tpl-single-group').html()),
events: {
"click a[data-type=organisation], button[data-type=organisation]" : "edit",
"click .js-delete-group" : "removeOrganisation",
},
initialize: function() {
this.model.on("error", function(model, xhr, options){
console.log(model, xhr, options);
console.log(this);
});
this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.removeView);
},
render: function() {
this.$el.html(this.template({
group: this.model.toJSON()
}));
return this;
},
removeView: function() {
this.remove();
},
removeOrganisation: function(e) {
this.model.destory();
this.remove();
},
edit: function(e) {
e.preventDefault();
Routes.Application.navigate('/organisation/edit/' + this.model.get('id'), { trigger: false });
var editClient = new Views.OrganisastionEditView({
model: this.model
});
}
});
Второе заблуждение вещь, что событие запроса выкинут, (имеет смысл рассматривать как будто я я сохраняю модель, но событие ошибки также выбрасывается, но ошибок нет xhr
, и я в настоящее время не проверяю модель?
Вот как я сохраняю u Ser для сбора членов в моей модели,
var member = new Pops.Models.User({ id: element.data('id') });
member.fetch({
success:function() {
self.model.get('members').add(member);
var model = self.model;
self.$('.search').hide();
self.$('button').show();
var projectMember = new Pops.Views.UserInitialsWithAdmin({
model: member
});
self.model.save({validate:false});
self.$('.search').parent().append(projectMember.render().el);
self.$('.search').remove();
}
});
Существует немного путаницы с декларированием моделей и коллекций в вашем примере. В первом примере атрибут 'members' объекта - это еще один объект javascript, а не' Backbone.Collection', поэтому мне интересно, как вы называете 'add' на нем. И для вашего второго вопроса - он работает как ожидалось. Событие 'request' будет вызываться при вызове' Backbone.sync' (инициируется 'model.fetch'). И если '$ .ajax' терпит неудачу, он вызовет обратный вызов ошибки. –