Wenn meine Backbone-Modelle Beziehungen haben (z. B. von Backbone-relational erstellt), können diese Beziehungen möglicherweise nullfähig sein, sodass die Felder für Fremdschlüssel manchmal null
lauten.Wie verhindern Sie, dass Knockback.js Anzeigemodelle für Nullbeziehungen erstellt?
Wenn ich mehrere Rückstoß-Ansicht Modelle habe, und ich habe Fabriken angegeben, so dass beim Befolgen von Beziehungen ich die Ansicht Modelle mit der gewünschten Funktionalität für das Modell, wenn es ein Attribut, das null
ist, geht es weiter und erstellt ein Ansichtsmodell, das null
als model
übergibt, das wahrscheinlich die meisten Funktionen des Ansichtsmodells zerstört.
Beispiel:
var ChildViewModel = kb.ViewModel.extend({
constructor: function (model, options) {
// this is the problem I'm trying to avoid - creating a view model with
// no model
if (!model) {
// just report the error somehow - the jsfiddle has the
// relevant HTML element
document.getElementById("error").innerHTML = "ChildModelView initialised without a model!";
}
kb.ViewModel.prototype.constructor.apply(this, arguments);
}
});
var ParentViewModel = kb.ViewModel.extend({
constructor: function (model, options) {
// specify factories here, because this way you can easily deal with
// reverse relationships, or complicated relationship trees when you
// have a large number of different types of view model.
kb.ViewModel.prototype.constructor.call(
this,
model,
{
factories: {relation1: ChildViewModel,
relation2: ChildViewModel},
options: options
}
);
}
});
// if we assume that relation2 is a nullable relationship, backbone-relational,
// for example, would give us a model that looks like this:
var model = new Backbone.Model({
id: 1,
relation1: new Backbone.Model({id: 2}), // this works fine
relation2: null // this causes a problem
});
var view_model = new ParentViewModel(model);
Und die Geige:
https://jsfiddle.net/vbw44vac/1/