Помните, что []
в JS является просто псевдонимом new Array()
, а поскольку объекты передаются по ссылке, каждый экземпляр вашей модели сеанса будет иметь один и тот же объект массива. Это приводит к возникновению всех проблем, включая массивы, которые кажутся пустыми.
Чтобы сделать эту работу так, как вам нужно, вам нужно инициализировать массив виджета в конструкторе. Это создаст уникальный массив виджета для каждого объекта сеанса и позволит устранить вашу проблему:
var Session = Backbone.Model.extend({
defaults: {
// ...
widgets: false
},
initialize: function(){
this.set('widgets',[]);
},
addWidget: function (widget) {
var widgets = this.get("widgets");
widgets.push(widget);
this.trigger("change:widgets", this, widgets);
},
// ...
// I have a method on the model to grabbing a member of the array
getWidget: function (id) {
console.log(this.attributes);
console.log(this.attributes.widgets);
// ...
}
});