我很难过。我有一个简单的骨干关系模型:
window.Site = Backbone.RelationalModel.extend({
idAttribute: "_id",
// These are the relations to the user model.
relations: [{
type: Backbone.HasMany,
key: 'users',
relatedModel: 'window.User'
}],
});
我的用户模型(与网站模型相关)如下所示:
//Site User model
// -------------
window.User = Backbone.RelationalModel.extend({
});
用户模型故意保持愚蠢,因为我还在进行原型设计。
我从服务器收到的JSON用于保护站点,用户看起来像这样:
{
_id: foo,
users: [
username: bar,
password: fizz
]}
我难倒的是听众。 SiteView(呈现我的SiteCollection)上的事件如下所示:
initialize: function() {
//basic bindings
this.model.bind('change', this.setSave, this);
this.model.bind('destroy', this.remove, this);
// bindings to sub-models
this.model.bind('add:users', this.setDetailsView, this);
this.model.bind('remove:users', this.setSave, this);
this.model.bind('change:users', this.setSave, this);
add:users
和remove:users
事件触发正常,但change:users
事件没有。在呈现我的Users模型的DetailsView中,我还有一些简单的事件绑定:
initialize: function() {
this.model.bind('change', this.render, this);
this.model.bind('destroy', this.remove, this);
但是,出于某种原因,SiteView中的change:users
事件不会触发,而DetailsView中的change
事件会触发。
这可能是因为:
change
事件在两个不同的视图中绑定两次?答案 0 :(得分:2)
对我而言,看起来更新:事件并不像您预期的那样完全正常。根据我的理解,它只会触发,如果键,即相关模型发生变化,但如果更改其属性则不会触发。这意味着,只有当您从一个用户切换到另一个用户时,它才会触发,而不是更改现有用户的属性。这是我对源代码第711行的理解。 可能有用的是:
this.model.get('users').each(function(user){
user.bind(change,this.render,this);
},this);
答案 1 :(得分:0)
更好的解决方案:
this.model.bind('relational:change:users', this.setSave, this);