主干关系更改事件未触发



我对此感到困惑。 我有一个简单的骨干关系模型:

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
]}

我难倒的是听众。站点视图(呈现我的网站集)上的事件如下所示:

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:usersremove:users事件可以正常触发,但change:users事件不会。在呈现我的用户模型的 DetailsView 中,我还有一些简单的事件绑定:

initialize: function() {
  this.model.bind('change', this.render, this);
  this.model.bind('destroy', this.remove, this);

但是,由于某种原因,SiteView 中的change:users事件不会触发,而 DetailsView 中的change事件会触发。

这可能是因为:

  • 用户模型上的change事件在两个不同的视图中绑定两次?
  • 用户模型不是双向的?
对我来说,

它看起来像更新:事件并没有完全按照您的预期工作。根据我的理解,它仅在键(即相关模型)发生变化时才触发,但如果您更改其属性,则不会触发。这意味着,仅当您从一个用户切换到另一个用户时,它才会触发,而不是在您更改现有用户的属性时触发。这是我对源代码第 711 行的理解。可能有效的是这样的:

this.model.get('users').each(function(user){
    user.bind(change,this.render,this);
},this);

更好的解决方案:

this.model.bind('relational:change:users', this.setSave, this);

相关内容

  • 没有找到相关文章

最新更新