nl_tokens: Event handler for change : <key > . If the key is changed notify old & new reverse relations and initialize the new relation .
pl_tokens: function ( model , attr , options ) { // Don't accept recursive calls to onChange (like onChange->findRelated->findOrCreate->initializeRelations->addRelated->onChange) if ( this . isLocked ( ) ) { return ; } this . acquire ( ) ; options = options ? _ . clone ( options ) : { } ; // 'options.__related' is set by 'addRelated'/'removeRelated'. If it is set, the change // is the result of a call from a relation. If it's not, the change is the result of // a 'set' call on this.instance. var changed = _ . isUndefined ( options . __related ) , oldRelated = <mask> ? this . related : options . __related ; if ( changed ) { this . setKeyContents ( attr ) ; var related = this . findRelated ( options ) ; this . setRelated ( related ) ; } // Notify old 'related' object of the terminated relation if ( oldRelated && this . related !== oldRelated ) { _ . each ( this . getReverseRelations ( oldRelated ) , function ( relation ) { relation . removeRelated ( this . instance , null , options ) ; } , this ) ; } // Notify new 'related' object of the new relation. Note we do re-apply even if this.related is oldRelated; // that can be necessary for bi-directional relations if 'this.instance' was created after 'this.related'. // In that case, 'this.instance' will already know 'this.related', but the reverse might not exist yet. _ . each ( this . getReverseRelations ( ) , function ( relation ) { relation . addRelated ( this . instance , options ) ; } , this ) ; // Fire the 'change:<key>' event if 'related' was updated if ( ! options . silent && this . related !== oldRelated ) { var dit = this ; this . changed = true ; Backbone . Relational . eventQueue . add ( function ( ) { dit . instance . trigger ( 'change:' + dit . key , dit . instance , dit . related , options , true ) ; dit . changed = false ; } ) ; } this . release ( ) ; }