|
21 | 21 | }(this, function($, _, Backbone) { |
22 | 22 | 'use strict'; |
23 | 23 |
|
24 | | - var _delayedTriggers = [], |
25 | | - nestedChanges; |
26 | 24 |
|
27 | 25 | Backbone.NestedModel = Backbone.Model.extend({ |
28 | 26 |
|
|
70 | 68 | } |
71 | 69 | } |
72 | 70 |
|
73 | | - nestedChanges = Backbone.NestedModel.__super__.changedAttributes.call(this); |
| 71 | + this._nestedChanges = Backbone.NestedModel.__super__.changedAttributes.call(this); |
74 | 72 |
|
75 | 73 | if (opts.unset && attrPath && attrPath.length === 1){ // assume it is a singular attribute being unset |
76 | 74 | // unsetting top-level attribute |
77 | 75 | unsetObj = {}; |
78 | 76 | unsetObj[key] = void 0; |
79 | | - nestedChanges = _.omit(nestedChanges, _.keys(unsetObj)); |
| 77 | + this._nestedChanges = _.omit(this._nestedChanges, _.keys(unsetObj)); |
80 | 78 | validated = Backbone.NestedModel.__super__.set.call(this, unsetObj, opts); |
81 | 79 | } else { |
82 | 80 | unsetObj = newAttrs; |
|
89 | 87 | } else if (opts.unset && _.isObject(key)) { |
90 | 88 | unsetObj = key; |
91 | 89 | } |
92 | | - nestedChanges = _.omit(nestedChanges, _.keys(unsetObj)); |
| 90 | + this._nestedChanges = _.omit(this._nestedChanges, _.keys(unsetObj)); |
93 | 91 | validated = Backbone.NestedModel.__super__.set.call(this, unsetObj, opts); |
94 | 92 | } |
95 | 93 |
|
96 | 94 |
|
97 | 95 | if (!validated){ |
98 | 96 | // reset changed attributes |
99 | 97 | this.changed = {}; |
100 | | - nestedChanges = {}; |
| 98 | + this._nestedChanges = {}; |
101 | 99 | return false; |
102 | 100 | } |
103 | 101 |
|
|
111 | 109 | }, |
112 | 110 |
|
113 | 111 | clear: function(options) { |
114 | | - nestedChanges = {}; |
| 112 | + this._nestedChanges = {}; |
115 | 113 |
|
116 | 114 | // Mostly taken from Backbone.Model.set, modified to work for NestedModel. |
117 | 115 | options = options || {}; |
|
199 | 197 | changedAttributes: function(diff) { |
200 | 198 | var backboneChanged = Backbone.NestedModel.__super__.changedAttributes.call(this, diff); |
201 | 199 | if (_.isObject(backboneChanged)) { |
202 | | - return _.extend({}, nestedChanges, backboneChanged); |
| 200 | + return _.extend({}, this._nestedChanges, backboneChanged); |
203 | 201 | } |
204 | 202 | return false; |
205 | 203 | }, |
|
210 | 208 |
|
211 | 209 |
|
212 | 210 | // private |
| 211 | + _getDelayedTriggers: function(){ |
| 212 | + if (typeof this._delayedTriggers === "undefined"){ |
| 213 | + this._delayedTriggers = []; |
| 214 | + } |
| 215 | + return this._delayedTriggers; |
| 216 | + }, |
213 | 217 | _delayedTrigger: function(/* the trigger args */){ |
214 | | - _delayedTriggers.push(arguments); |
| 218 | + this._getDelayedTriggers().push(arguments); |
215 | 219 | }, |
216 | 220 |
|
217 | 221 | _delayedChange: function(attrStr, newVal, options){ |
|
227 | 231 | }, |
228 | 232 |
|
229 | 233 | _runDelayedTriggers: function(){ |
230 | | - while (_delayedTriggers.length > 0){ |
231 | | - this.trigger.apply(this, _delayedTriggers.shift()); |
| 234 | + while (this._getDelayedTriggers().length > 0){ |
| 235 | + this.trigger.apply(this, this._getDelayedTriggers().shift()); |
232 | 236 | } |
233 | 237 | }, |
234 | 238 |
|
|
0 commit comments