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 donevar 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 somethingMyLocalizer = 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
}
});