Using a KnockBack ViewModel, is there a way to create a computed observable from the underlying Backbone model's methods?
As an example, in javascript:
var MyModel = Backbone.model.extend({
validate: function () {
return this.get('name').length < 0;
}
}),
baseModel = new MyModel({name: 'foo'}),
kbViewModel = kb.viewModel(baseModel),
modelContainer = document.querySelector('#myModel');
ko.applyBindings(kbViewModel, modelContainer);
and in the Knockout markup:
<div id="myModel">
<div data-bind="css:{'invalid': !validate()}">
<input type="text" data-bind="value: name" />
</div>
</div>
When I try to run this, I get the error:
Unable to process binding "css: function (){return {'invalid':!validate()} }"
Message: validate is not defined
Am I doing something wrong, or do I need to create the observable in the ViewModel manually?
var MyModel = Backbone.Model.extend({
validate: function () {
return this.get('name').length > 0;
}
}),
MyKBViewModel = kb.ViewModel.extend({
constructor: function (model) {
kb.ViewModel.prototype.constructor.call(this, model);
this.validate = ko.pureComputed(function () {
return this.name().length > 0;
}, this);
}
}),
baseModel = new MyModel({name: 'foo', class: 'bar'}),
kbViewModel = new MyKBViewModel(baseModel),
modelContainer = document.querySelector('#myModel');
ko.applyBindings(kbViewModel, modelContainer);
jsfiddles: without observable, with observable