Mit einem KnockBack ViewModel, gibt es eine Möglichkeit, ein berechnetes Observable aus den zugrunde liegenden Methoden des Backbone-Modells zu erstellen?Kann mit KnockBack ViewModel eine berechnete Observable aus den Methoden des zugrunde liegenden Backbone-Modells erstellt werden?
Als Beispiel 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);
und in dem K.-o.-Markup:
<div id="myModel">
<div data-bind="css:{'invalid': !validate()}">
<input type="text" data-bind="value: name" />
</div>
</div>
Wenn ich versuche, dies auszuführen, erhalte ich die Fehlermeldung:
Unable to process binding "css: function(){return {'invalid':!validate()} }"
Message: validate is not defined
Mache ich etwas falsch oder muss ich das Observable im ViewModel manuell erstellen?
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