2012-08-15 66 views
0

我很難過這個。我有一個簡單的骨幹關係模型:骨幹關係改變事件沒有發射?

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:usersremove:users事件觸發罰款,但change:users事件不會。在DetailsView,這使得我的用戶模型,我也有一些簡單的事件綁定:

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

但是,出於某種原因,該change:users事件中的SiteView不火,而change事件在DetailsView一樣。

難道這是因爲:

  • change事件上的用戶模型兩種不同的觀點,勢必兩次?
  • 用戶模式不是雙向的嗎?
+0

此外,結合更新':users'給出了相同的結果 – CamelBlues 2012-08-15 18:53:26

回答

2

對我來說,它看起來像更新:事件並不像你預期的那樣工作。根據我的理解,只有在關鍵字(即相關模型)發生變化時纔會觸發,但如果您更改其屬性,則不會觸發。這意味着,只有當您從一個用戶切換到另一個用戶時,它纔會觸發,而不是如果您更改現有用戶的屬性。這是我對源代碼行711的理解。 什麼可能的工作是類似的規定:

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

謝謝!這是行得通的,但我認爲可以通過在我的模型上設置'reverseRelation'來預測'update'事件。仍試圖找出如何做到這一點......但這是一個很好的解決方案! – CamelBlues 2012-08-15 21:42:44

+0

它的作品很棒,讓我們知道,如果相反的做法 – schacki 2012-08-15 22:04:15

+1

工程就像一個魅力! 'reverseRelation'不起作用 – CamelBlues 2012-08-24 02:18:03

0

更好的解決方案:

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

你從哪裏得到這個'relational:'語法?我沒有看到任何文檔。 – 2015-10-27 21:38:41