class Person extends Backbone.RelationalModel relations: [{ type: Backbone.HasMany key: 'friends' relatedModel: Person }] john = new Person({ id: 'person-1' name: 'John' friends: ['person-2'] }) paul = new Person({ id: 'person-2' name: 'Paul' friends: ['person-1'] }) john_view_model = kb.viewModel(john) friend_view_model = john_view_model.friends()[0] kb.utils.wrappedModel(friend_view_model) # paul kb.utils.wrappedModel(friend_view_model.friends()[0]) # john ... kb.utils.release(john_view_model); john_view_model = null # release when done
var Person = Backbone.RelationalModel.extend({ relations: [{ type: Backbone.HasMany, key: 'friends', relatedModel: Person }] }); var john = new Person({ id: 'person-1', name: 'John', friends: ['person-2'] }); var paul = new Person({ id: 'person-2', name: 'Paul', friends: ['person-1'] }); var john_view_model = kb.viewModel(john); var friend_view_model = john_view_model.friends()[0]; kb.utils.wrappedModel(friend_view_model); // paul kb.utils.wrappedModel(friend_view_model.friends()[0]); // john ... kb.utils.release(john_view_model); john_view_model = null; // release when done });
# WAS: view_model = property: ko.observableArray() collection_observable: kb.collectionObservable(collection, observable_array, options) for model_view_model in view_model.property() ... # IS NOW: view_model = property: kb.collectionObservable(collection, options) for model_view_model in view_model.property() ...
// WAS: var view_model = { property: ko.observableArray() collection_observable: kb.collectionObservable(collection, observable_array, options) }; var view_model; for (var i = 0, len = view_model.property().length; i < len; i++) { view_model = view_model.property()[i]; ... } // IS NOW: var view_model = { property: kb.collectionObservable(collection, options) }; var view_model; for (var i = 0, len = view_model.property().length; i < len; i++) { view_model = view_model.property()[i]; ... }
This means:
Required Changes:
collection_observable = kb.collectionObservable(new Backbone.Collection([{name: 'name2'}, {name: 'name1'}]), { view_model: kb.ViewModel sorted_index: (models, model) -> return _.sortedIndex(models, model, (test) -> return kb.utils.wrappedModel(test).get('name') ) })
collection_observable = kb.collectionObservable(new Backbone.Collection([{name: 'name2'}, {name: 'name1'}]), { view_model: kb.ViewModel, sorted_index: function(models, model) { return _.sortedIndex(models, model, function(test) { return kb.utils.wrappedModel(test).get('name'); }); } });
for view_model in collection_observable() # do something)
var view_model; for (var i = 0, len = collection_observable().length; i < len; i++) { view_model = collection_observable()[i]; // do something }
Required Changes:
collection.bind('change', -> collection_observable.valueHasMutated())
collection.bind('change', function(){ collection_observable.valueHasMutated(); });
You can find all of the utility functions here
Here is a list of the deprecated functions:
Required Changes:
class MyLocalizer extends kb.LocalizedObservable constructor: (value, options, view_model) -> super; return kb.utils.wrappedObservable(this) read: (value) -> # return something write: (localized_string, value) -> # do something
MyLocalizer = kb.LocalizedObservable.extend({ constructor: function(value, options, view_model) { kb.LocalizedObservable.prototype.constructor.apply(this, arguments); return kb.utils.wrappedObservable(this); }, read: function(value) { # return something }, write: function(localized_string, value) { # do something } });