Skip to content
This repository
Newer
Older
100644 401 lines (287 sloc) 21.61 kb
b9cb6cdb »
2012-09-10 Moved release notes to the repository
1 Please refer to the following release notes when upgrading your version of Knockback.js.
2
bc2e4aa6 » Kevin Malakoff
2014-07-01 Bump version number
3 ## 0.19.0
0bf71b2c » Kevin Malakoff
2014-07-01 Added core stack back
4 * Removed standalone plugins. Just choose knockback if you need one or more plugins.
5 * Change library building to use webpack.
013938e9 »
2014-07-08 Update release notes
6 * Avoid creating dependencies in collectionObservable's destroy: https://github.com/kmalakoff/knockback/pull/120
7b2d371a » Kevin Malakoff
2014-06-26 Got knockback tests configured
7
4a396a80 »
2014-06-16 Put AMD loader first due to webpack imcompatibity
8 ## 0.18.6
9 * Put AMD loader first due to webpack imcompatibity
10
176fe62b »
2014-03-09 Release notes
11 ## 0.18.5
12 * Fix for memory leak: https://github.com/kmalakoff/knockback/pull/110
13
e029af31 »
2014-02-24 Bumped due to npm publish mistake
14 ## 0.18.4
15 * fixed failed npm publish
16
210e7f55 » Kevin Malakoff
2014-02-23 Made knock back server-side safe
17 ## 0.18.3
18 * made safe to run on Node.js
19
d61a57f0 »
2013-12-07 Bump version to 0.18.2
20 ## 0.18.2
21 * added auto_compact option for collection paging to regenerate observables on collection reset
22 * exposed kb.ViewModel's createObservables and mapObservables functions for manual use
23
41a864cb »
2013-11-25 Bugfix for missing binding of this pointer on custom read method
24 ## 0.18.1
25 * bugfix for missing binding of this pointer on custom read method
26
226de3f3 »
2013-11-20 Added auto-generate of a collection if one isn't passed
27 ## 0.18.0
f3a83f8c »
2013-11-22 BREAKING CHANGE: make filter consistent with Underscore.js #67
28 * BREAKING CHANGE: filter is now consistent with underscore.js (it was opposite previously where filter true meant remove instead of keep)
2ae20adf »
2013-11-23 Refactor to use mocha for async tests
29 * BREAKING CHANGE: knockback component libraires are now without the 'knockback-' infront of them. For example, lib/knockback-defaults.js is now lib/defaults.js
ee56076f »
2013-11-25 Auto-generate collection is array of models is passed
30 * BREAKING CHANGE: removed window.Knockback symbol publishing (now only window.kb is supported).
31 * kb.ViewModel, kb.CollectionObservable, and kb.Observable are now guaranteed to not create observable dependencies when you set their properties
32 * options merging: automate the merging of options including 'internals', 'requires', 'excludes', 'keys', 'factories', 'statics', 'staticDefaults'
f3a83f8c »
2013-11-22 BREAKING CHANGE: make filter consistent with Underscore.js #67
33 * improved AMD module loading support: https://github.com/kmalakoff/knockback/pull/80
ee56076f »
2013-11-25 Auto-generate collection is array of models is passed
34 * kb.collectionObservable: added automatic creation of a collection is one isn't passed or if an array is passed since you can reference it using collection() on the observable
e90cceec »
2013-06-05 Added tests for knockout-2.3.0pre
35 * bug fix for findOrCreate refering to incorrect class
037f3773 »
2013-11-18 Update release notes
36 * updated tests for latest libraries (Knockout 3.0.0, Backbone 1.1.0, Underscore 1.5.2, LoDash 2.3, and BackboneRelational 0.8.6)
c5a22b60 »
2013-11-17 Update release notes
37 * added 'sort' collection message in addition to 'resort'
7a267550 »
2013-11-17 Update release notes
38 * bug fix for removed model: https://github.com/kmalakoff/knockback/issues/87
ee56076f »
2013-11-25 Auto-generate collection is array of models is passed
39 * added statics and static_defaults: kb.viewModel(model, {statics: ['name'], staticDefaults: {name: '(no name)'}})
e90cceec »
2013-06-05 Added tests for knockout-2.3.0pre
40
c5a22b60 »
2013-11-17 Update release notes
41 ## 0.17.2
a83aa3d6 »
2013-04-08 Disable auto-inject until properly resolved.
42
43 * auto-disable RECUSIVE_AUTO_INJECT flags (default disabled) until investigated: https://github.com/kmalakoff/knockback/issues/63
44 * bug fix for relational release in EventWatcher
45
f3f74598 »
2013-04-06 Bump version number to 0.17.1
46 ## 0.17.1
47
d5f1872f »
2013-04-06 Reduced destructiveness of kb.release
48 * reduce the destructiveness of kb.release (and speed it up too): https://github.com/kmalakoff/knockback/issues/48
49 * enable recursive auto inject using RECUSIVE_AUTO_INJECT flags (default enabled): https://github.com/kmalakoff/knockback/issues/63
f3f74598 »
2013-04-06 Bump version number to 0.17.1
50 * allow kb.CollectionObservable options for internals, excludes, and requires be either arrays or individual strings
51
0c12410a »
2013-03-30 Bump to 0.17.0
52 ## 0.17.0
c5da9dc9 »
2013-01-28 Build
53
54 * added kb.wasReleased helper function
55 * bug fix for recursive view model create: https://github.com/kmalakoff/knockback/issues/53
dda743fd »
2013-03-24 Bug fix for models_only: #59
56 * added support for Parse framework (no-AMD support): https://github.com/kmalakoff/knockback/issues/51
57 * bug fix for nested filter dependencies: https://github.com/addyosmani/todomvc/issues/381
58 * bug fix for filtering notifications: https://github.com/kmalakoff/knockback/issues/53
59 * bug fix for models_only on change event: https://github.com/kmalakoff/knockback/issues/59
ccdc0d0e »
2013-03-24 Added support for Backbone 1.0.0. Note: needed to patch Backbone-rela…
60 * added support for Backbone 1.0.0. Note: needed to patch Backbone-relational to 0.8.0plus and to add _.findWhere to lodash.
8432b01f »
2013-03-28 Added automatic call of afterRender on a view model in kb.renderTempl…
61 * added automatic call of afterRender on a view model in kb.renderTemplate unless afterRender is also provided in the options (to avoid multiple calls).
c5da9dc9 »
2013-01-28 Build
62
718eb1e1 »
2013-03-30 Update RELEASE_NOTES.md
63 ## 0.16.8
39b22c0b »
2012-12-25 Upgraded Knockout.js, Underscore.js, Backbone.js to latest version. B…
64
65 * updated knockback-full-stack for latest Underscore.js, Backbone.js, and Knockout.js
66 * bugfix for viewModelByModel if the ViewModel has not yet been initialized
67 * removed legacy functionality that had been previously warned for removal: kb.utils.release, kb.renderAutoReleasedTemplate, ko.defaultWrapper, kb.CollectionObservable::sorted_index/sortedIndex
68
bdfc9113 »
2012-09-19 Bumped version to 0.16.7
69 ## 0.16.7
70
c913714c »
2012-09-26 Replaced sortedIndex with comparator
71 * replaced `sortedIndex` by `comparator` for sorting a kb.collectionObservable
3bdd55dd »
2012-09-26 Updated kb.EventWatcher to take a event selector instead of a single …
72 * added extensibility to knockback-validation.js through data-bind on input elements. Added $enabled and $disabled and renamed internal helpers ($error_count, $valid, and $active_error) with '$' prefix.
73 * published filters function on kb.CollectionObservable.
74 * added stricted checking for compatible type setting on a kn.CollectionObservable's ko.observableArray.
89f45d66 »
2012-09-24 Added kb.hasModelSignature and kb.hasCollectionSignature. Added bette…
75 * added kb.utils.hasModelSignature and kb.utils.hasCollectionSignature to simplify signature checking.
3bdd55dd »
2012-09-26 Updated kb.EventWatcher to take a event selector instead of a single …
76 * added an event selector to kb.EventWatcher so multiple events could be bound at the same time.
93dafba9 »
2012-09-24 Refactored ModelWatcher to EventWatcher
77 * made the kb.ModelWatcher into a general-purpose kb.EventWatcher so it could also watch collection events.
7fba4a08 »
2012-09-21 Introduced no_share option for when you create a kb.ViewModel with nu…
78 * bug fix: added dispose of kb.CollectionObservable _mapping
0f40cdf9 »
2012-09-21 Bug fix: general purpose simple object test
79 * bug fix: implemented general-purpose basic object test
bdfc9113 »
2012-09-19 Bumped version to 0.16.7
80
c913714c »
2012-09-26 Replaced sortedIndex with comparator
81 ### Deprecations
82
67eff831 »
2012-09-26 Bump to 0.16.7
83 * **ko.collectionObservable `sortedIndex` has been replaced by `comparator` so you can resort in custom ways rather than reducing the sorting down to an index.
c913714c »
2012-09-26 Replaced sortedIndex with comparator
84
f47e69a4 »
2012-09-18 Bug fix: array attribute type (issue 45)
85 ## 0.16.6
86
7fba4a08 »
2012-09-21 Introduced no_share option for when you create a kb.ViewModel with nu…
87 * bug fix: ko.obseravbleArray not created for simple array attribute types ([issue #45](https://github.com/kmalakoff/knockback/issues/45))
f47e69a4 »
2012-09-18 Bug fix: array attribute type (issue 45)
88
45a1728e »
2012-09-13 Fixed kb.injectApps to be called after scripts are loaded. Bump versi…
89 ## 0.16.5
90
57d147e3 »
2012-09-16 Updating importing for Brunch importing compliance
91 * renamed kb-app to kb-inject and kb.injectApps to kb.injectViewModels to better reflect the general nature of the injection mechanism: expanded the flexibilty and use cases for data-bind 'inject' amd kb-inject: use 'new' on the for functions to permit class hierachies to be used and recursively resolving view_model or create within the binding cycle.
92 * **afterBinding and beforeBinding**: put into a special options property to simplify the kb-inject attribute syntax (eg. no need to specify view_model: for the properties to seed your view model with) and allow to be included on the view_model
93 * bug fix: fixed case where kb.injectViewModels (formerly kb.injectApps) could be called before page scripts loaded.
f8a909c4 »
2012-09-16 Inject: added memory management tests for all use cases
94 * bug fix: fixed case where kb.Observable set 0 to null (issue 44).
8e1b70dc »
2012-09-14 Added AMD loader and headers to all components and stack
95 * added headers to all components and stack versions.
96 * added AMD loader to all components.
45a1728e »
2012-09-13 Fixed kb.injectApps to be called after scripts are loaded. Bump versi…
97
47771c63 »
2012-09-12 Preparing for patch release of 0.16.4 (nugget package had errors)
98 ## 0.16.4
99
100 * path release: incorrect version displayed in headers (was 0.16.2 instead of 0.16.3) and missing files from NuGet package.
101
d4eb4530 »
2012-09-12 Bug fix for DOM Exception. Increased factory sharing.
102 ## 0.16.3
103
104 * **kb-app injection bugfix**: fixed 'NOT_FOUND_ERR: DOM Exception 8 error' (chrome warning) when app is bound multiple times.
105 * **increased factory sharing**: reduced the factory nesting through more aggressive sharing
106
b9cb6cdb »
2012-09-10 Moved release notes to the repository
107 ## 0.16.2
108
109 * **major changes to kb.CollectionObservable**: added support for observable mappings (sort_attribute, sorted_index_fn and filters), removed defer, removed optional collection reference counting, removed Backbone.Events (use ko.subscription instead, removed wrappedObject in the collection).
110
95c40744 »
2012-09-11 Added validators.
111 * **added app and view_model injection**: you are now able to inject an application using a kb-app attribute on a dom element and inject into a view model using an 'inject' data-bind attribute.
112
113 * **added validators**: you can use kb.valueValidator, kb.inputValidator, or kb.formValidator to add validations. Currently only the following are support: 'required', 'url', 'number', 'email' and you can extend by adding properties to kb.validators
114
115 ### Deprecations
116
2a3b79ba »
2012-09-12 Release notes
117 * **ko.renderAutoReleasedTemplate replaced by kb.renderTemplate**: reduced verbosity
b9cb6cdb »
2012-09-10 Moved release notes to the repository
118
d98c88a9 »
2012-09-12 Added warning about 'NOT_FOUND_ERR: DOM Exception 8 error' error with…
119 ## 0.16.1
b9cb6cdb »
2012-09-10 Moved release notes to the repository
120
121 * renamed kb.DefaultWrapper to kb.DefaultObservable to provide consistency with classes that return a ko.observable or ko.observableAray instead of 'this' from constructor.
122
123
124 ## 0.16.0
125
126 * **added 2-way sync to kb.CollectionObservable**: now supports Knockout.js options and selectedOptions view model setting ([issue #37](https://github.com/kmalakoff/knockback/issues/37))
127
128 * **simplified and improved memory management**: all reference counting has been removed by using paths and create comparisons in the kb.Store for shared ViewModels. Please take a look at the [Knockback Reference App](kmalakoff.github.com/knockback-reference-app) for memory profiling tests in the Demo Mode -> Statistics menu.
129
130 * **improved consistency in nested kb.ViewModels**: now all nested observables created both by create functions and constructor are guaranteed to be wrapped in ko.observable ([issue #28](https://github.com/kmalakoff/knockback/issues/28)). Please note: iterating over the view models in a kb.CollectionObservable still return the unwrapped view model.
131
132 * **merged functionality from kb.AttributeConnector into kb.Observable**: including generating the correct attribute observable type (ko.observable, ko.observableArray, kb.ViewModel, kb.CollectionObservable, or custom through the 'factories' create option) based on the attribute value type. You can get access to the underlying observable using value().
133
134 * **merged functionality from kb.Observables into kb.ViewModel**: including bulk mode [key1, key2, key3], mapping to an alternative ViewModel, providing options to specific observables {key1: {default: '(missing)'}, key2: {}}, etc. See [options](http://kmalakoff.github.com/knockback/doc/classes/kb/ViewModel.html#constructor-instance) for information on all of the options.
135
136 * **kb.release now handles arrays**: you can release an array of observables/ViewModels like:
137
138 ```
139 var array = [kb.viewModel(model1), kb.collectionObservable(collection1)];
140 ...
141 kb.release(array);
142 ```
143
144 * **made it possible to derive from kb.CollectionObservable**: use can use CoffeeScript inheritance or the JavaScript 'extend' class method. Be careful to return the ko.collectionArray from the constructor instead of the 'this'.
145
146 ```
147 window.ThingCellCollectionObservable = kb.CollectionObservable.extend({
148 constructor: function(collection, options) {
149 // return ko.observableArray instead of 'this'
150 return kb.CollectionObservable.prototype.constructor.call(this, collection, {
151 view_model: ThingCellViewModel,
152 options: options
153 });
154 }
155 });
156
157 // OR
158 window.ThingCellCollectionObservable = kb.CollectionObservable.extend({
159 constructor: function(collection, options) {
160 kb.CollectionObservable.prototype.constructor.call(this, collection, {
161 view_model: ThingCellViewModel,
162 options: options
163 });
164
165 // return ko.observableArray instead of 'this'
166 return kb.utils.wrappedObservable(this);
167 }
168 });
169
170 ```
171
172 * **added 'models_only' option to kb.CollectionObservable**: rather than deducing whether ViewModels should be created for a kbCollectionObservable, now you must explicitly state that you would only like models to be created or else a default kb.ViewModel will be created for each model.
173
174 * **added 'filters' option to kb.CollectionObservable**: now in addition to per-collection observable sorting, you can also filter a collection independent of the Backbone.Collection.
175
176 * **added factories option to kb.CollectionObservable and kb.ViewModel**: you can specify a constructor, create function, or models_only flag for a path. For example:
177
178 ```
179 var view_model = {
180 kb_view_models: kb.collectionObservable(collection),
181 no_view_models: kb.collectionObservable(collection, { factories: {
182 'models': { models_only: true }
183 }}),
184 nested_different: kb.collectionObservable(collection, { factories: {
185 'models': PersonViewModel
186 'models.friends.models': FriendViewModel
187 }}),
188 created: kb.collectionObservable(collection, { factories: {
189 'models': { create: function(model, options) { return new ContactViewModelDate(model, options); } }
190 }}),
191 heterogenous_created: kb.collectionObservable(collection, { factories: {
192 'models': { create: function(model, options) {
193 return model.get('style') === 'Cool') ?
194 CoolViewModel(model, options) :
195 kb.viewModel(model, options);
196 } }
197 }})
198 };
199 ```
200
201 * **added convention for linking the lifecycle of DOM nodes and ViewModels**: added the following functions to auto release nodes when their element is removed using ko.removeNode(el):
202
203 ```
204 kb.releaseOnNodeRemove(view_model, node) -> binds kb.release to be called when ko.removeNode is called on the node.
205
206 kb.renderAutoReleasedTemplate(template_name, view_model, options) -> renders a template and binds auto-release to the template node
207
208 kb.applyBindings(view_model, node) -> applies bindings and binds auto-release to the node
209 ```
210
211 * **added support for attribute changing types**: if you use kb.ViewModel or kb.Observable, when a Backbone.Model's attribute changes type, the corresponding observable will change types too.
212
213 ```
214 var model = new Backbone.Model({reused: null});
215 var view_model = kb.viewModel(model);
216 kb.utils.valueType(view_model.reused); // kb.TYPE_SIMPLE
217
218 model.set({reused: new Backbone.Model()});
219 kb.utils.valueType(view_model.reused); // kb.TYPE_MODEL
220 ```
221
222 * **added support for recursive options.options**: rather than requiring manual merging of options when you derive from kb.ViewModel and kb.CollectionObservable, you can pass options as a property on the options:
223
224 ```
225 var HouseViewModel = kb.ViewModel.extend({
226 constructor: (model, options) ->
227 kb.ViewModel.prototype.constructor.call(this, model, {factories: {
228 'occupants.models': PersonViewModel
229 }, options: options});
230 })
231 ```
232
233 * **added shareOptions helper to share a store**: both kb.ViewModel and kb.CollectionObservable use a kb.Store and kb.Factory to share ViewModels for breaking potential-recursive Model cycles. You can use the shareOptions() to increase the sharing with new kb.ViewModels and kb.CollectionObservables.
234
235 ```
236 var collection = new Backbone.Collection([model1, model2, model3]);
237 var co1 = ko.collectionObservable(collection)
238 var co2 = ko.collectionObservable(collection, co1.shareOptions()); // view models ail be shared across collection observables.
239 ```
240
241 * **added kb.ModelWatcher to provide an Backbone.Events hub**: rather than registering a new event handler for each observable, you and kb.ViewModel shares the event handler registration. Also, the kb.Statistics manager can optionally be used to track all Backbone.Model events intercepted and handled.
242
243 * **upgraded kb.Statistics**: now you can optionally track detailed statistics on kb.ViewModels and kb.CollectionObservables in memory, and on Backbone.Events triggered. See the [API docs](http://kmalakoff.github.com/knockback/doc/classes/kb/Statistics.html) for information or [Knockback Reference App](kmalakoff.github.com/knockback-reference-app) for a usage example.
244
245 * **added kb.utils.wrappedObject**: added utility that can be used to get/set an underlying object that an observable or ViewModel is wrapping. For example, a kb.CollectionObservable wraps a collection and a kb.ViewModel wraps a Backbone.Model or Backbone.ModelRef. For a ViewModel, this is similar to kb.utils.wrappedModel except that kb.utils.wrappedModel will return the wrapper if the model doesn't exist which is important simplifying code when iterating over the Models or ViewModels stored in a kb.CollectionObservable.
246
247 * **kb.utils.wrappedStore**: added utility to get a store of ViewModels to share them between observables (for [Relational Models](http://kmalakoff.github.com/knockback/tutorial_relational_models.html), selectedOptions, manually sharing ViewModels in custom create functions, etc).
248
249 ```
250 collection_observable = kb.collectionObservable(new Backbone.Collection())
251 collection_observable_shared = kb.collectionObservable(new Backbone.Collection(), {store: kb.utils.wrappedStore(collection_observable)})
252 ```
253 * **added path functions to assist with factories**: you can use kb.utils.pathJoin(path1, path2) and kb.utils.optionsPathJoin(options, path) to combine dot-delimited paths.
254
255
256 ### Required changes
257
258 * **replace kb.utils.release with kb.release**: simplified the naming of this common function.
259
260 * **kb.ViewModel and kb.CollectionObservable options**: view_model_create(model), create(model, key), children have been replaced by the mappings options as explained above. This change was made to simplify and standardize the way to override custom ViewModels. You will need to use mappings + paths + one of 'constructor' or 'create: function(model, options)' or 'models_only: true' as demonstrated above.
261
262 * **kb.CollectionObservable explicit models_only**: previously, if you did not specify a view_model for your collection, the kb.CollectionObservable stored models instead of ViewModels. Now you must explicitly pass the models_only option. This change was made to provide better default behavior for nested collections meaning a kb.ViewModel is automatically created for each nested Model unless otherwise specified.
263
264 ```
265 var collection_observable = kb.collectionObservable(collection, {models_only: true});
266 ```
267
268 * **custom factories for nested models**: if you were using 'view_model_create' or 'children' for specifying view models for nested models, you need to replace them with the 'factories' options as follows:
269
270 ```
271 var view_model = kb.viewModel(model, {
272 factories: {
273 'friends.models': FriendViewModel,
274 'friends.models.friends.models': FriendViewModel
275 }
276 });
277 ```
278
279 * **kb.observables keys now an option**: besides changing all your references to kb.viewModel, if you were using a keys array, you need to map it to 'keys' or 'requires' options:
280
281 ```
282 // WAS
283 kb.observables(model, ['key1', 'key2']);
284
285 // IS NOW
286 kb.viewModel(model, {keys: ['key1', 'key2']});
287
288 ```
289
290
291 ### Deprecations
292
293 * **replaced kb.utils.release with kb.release**: simplified the naming of this common function.
294
295 * **read_only and write option removed**: should be handled by binding logic instead (this parameter will be ignored)
296
297 * **kb.utils.observableInstanceOf removed**: has been replaced by kb.utils.valueType which can be used to determine what type of value an observable is wrapping.
298
299 * **kb.observables deprecated**: the functionality has been merged into [kb.ViewModel](http://kmalakoff.github.com/knockback/doc/classes/kb/ViewModel.html).
300
301 * **removed kb.RefCountable**: upgraded the kb.Store to not require reference counting to track observables so reference counting has been removed from kb.ViewModel and kb.CollectionObservable.
302
303 * **merged kb.AttributeConnector functionality into kb.Observable**: use kb.Observable instead.
304
305 * **nested model 'view_model_create' and 'children' factories replaced with constructor option factories**: see above.
306
307
308 ## 0.15.0
309 * **kb.collectionObservable no longer triggers changes when model attributes change** (only when the list of models is modified) to reduce regenerating view models when an embedded model changes
310
311 * **added kb.utils**: utility functions have been moved to kb.utils to be more consistent with Knockout. See [kb.utils](http://kmalakoff.github.com/knockback/docs_kb_utils.html)
312
313 * **kb.LocalizedObservable now uses Backbone.extend**: now JavaScript inheritance is possible so read/write options have been deprecated
314
315 * **kb.ViewModel now handles nested models** (like self-referencing Backbone-Relational.js models). **Related tutorials**: [Relational Models](http://kmalakoff.github.com/knockback/tutorial_relational_models.html) [kb.ViewModel](http://kmalakoff.github.com/knockback/tutorial_kb_view_model.html)
316
317 ```
318 var Person = Backbone.RelationalModel.extend({
319 relations: [{
320 type: Backbone.HasMany,
321 key: 'friends',
322 relatedModel: Person
323 }]
324 });
325
326 var john = new Person({
327 id: 'person-1',
328 name: 'John',
329 friends: ['person-2']
330 });
331 var paul = new Person({
332 id: 'person-2',
333 name: 'Paul',
334 friends: ['person-1']
335 });
336
337 var john_view_model = kb.viewModel(john);
338
339 var friend_view_model = john_view_model.friends()[0];
340 kb.utils.wrappedModel(friend_view_model); // paul
341 kb.utils.wrappedModel(friend_view_model.friends()[0]); // john
342 ```
343
344 * **kb.CollectionObservable is now a ko.observableArray**: you no longer need to supply the second parameter
345
346 ```
347 // WAS:
348 var view_model = {
349 property: ko.observableArray()
350 collection_observable: kb.collectionObservable(collection, observable_array, options)
351 };
352
353 var view_model;
354 for (var i = 0, len = view_model.property().length; i < len; i++) {
355 view_model = view_model.property()[i];
356 ...
357 }
358
359 // IS NOW:
360 var view_model = {
361 property: kb.collectionObservable(collection, options)
362 };
363
364 var view_model;
365 for (var i = 0, len = view_model.property().length; i < len; i++) {
366 view_model = view_model.property()[i];
367 ...
368 }
369 ```
370
371 ### Required changes
372
373 * **kb.collectionObservable no longer triggers changes when model attributes change** so if you need to respond to embedded model changes (that cannot be handled by their view models directly), manually register for the changes like: `collection.bind('change', function(){ collection_observable.valueHasMutated(); });`
374 * **kb.collectionObservable is now a ko.observableArray** so remove the second parameter which used to contain the ko.observableArray
375
376 ### Deprecations
377
378 * **kb.utils.wrappedObservable(instance {, observable})** replaces **Knockback.wrappedObservable(instance)**
379
380 * **kb.utils.wrappedModel(view_model {, observable})** replaces **Knockback.viewModelGetModel(view_model)** and **Knockback.vmModel(view_model)**
381
382 * **kb.utils.release(obj)** replaces **Knockback.vmRelease(view_model)** and **Knockback.vmReleaseObservable(observable)**
383
384 * was replaced by kb.utils.release(obj)
385
386 * **kb.LocalizedObservable now uses Backbone.extend** for JavaScript inheritance so replace all options with inheritance:
387
388 ```
389 var MyLocalizer = kb.LocalizedObservable.extend({
390 constructor: function(value, options, view_model) {
391 kb.LocalizedObservable.prototype.constructor.apply(this, arguments);
392 return kb.utils.wrappedObservable(this);
393 },
394 read: function(value) {
395 # return something
396 },
397 write: function(localized_string, value) {
398 # do something
399 }
400 });
718eb1e1 »
2013-03-30 Update RELEASE_NOTES.md
401 ```
Something went wrong with that request. Please try again.