Penso che la classe Backbone View sia abbastanza astratta. Tutto quello che devi fare è passare diverse opzioni quando crei una nuova istanza View.
E ho scoperto che si posiziona la logica di calcolo nel metodo di rendering View. Poiché Backbone è un framework basato su MVC, la logica dovrebbe essere posizionata nel gestore di eventi del registro Model e View, responsabile del rendering del layout durante l'evento Fire del modello a cui è interessata la vista.
A mio parere, è possibile aggiungere un modello che gestisce calcola e ridefinisce la vista.
mio semplice esempio:
1.Define un modello che è rispondere per la logica di calcolo:
var MathModel = Backbone.Model.extend({
result: 0,
initialize: function(){
console.log("calculate target: "+this.get("selector"));
console.log("calculate method: "+this.get("method"));
var number = this.handlePluginData();
this.doSomethingWithResult(number);
},
handlePluginData: function(){
return $(this.get("selector")).text();
},
doSomethingWithResult: function(number){
if(this.get("method")==="square"){
this.set({result:(number*number)});
}else{
this.set({result:(number*number*number)});
}
}
});
2.Redefine la classe View:
vista sarà registrare un listener per il modello " risultato "data change event e renderizza un layout iniziale in base al modello che hai assegnato.
var AbstractView = Backbone.View.extend({
initialize: function(){
this.listenTo(this.model,"change",this.onModelChange);
this.number = this.model.get("result");
this.render();
},
render: function(){
this.$el.html(this.number);
},
onModelChange: function(model){
this.number = model.get("result");
this.render();
},
plusOne:function(){
this.model.doSomethingWithResult(this.model.handlePluginData());
}
});
3.Passare diverse opzioni da modellare quando si crea un'istanza di una nuova vista.
var view1 = new AbstractView({el:"#result1",model:new MathModel({selector:".square",method:"square"})});
var view2 = new AbstractView({el:"#result2",model:new MathModel({selector:".cubic",method:"cubic"})});
4.html:
<div id="select-target">
<span class="square">2</span>
<span class="cubic">2</span>
<button id="plus-one">+1</button>
</div>
<div id="result">
<span id="result1"></span>
<span id="result2"></span>
</div>
5.Plus un pulsante gestore di eventi click:
Si potrebbe osservare come View ri-renderizzare è layout quando il modello viene modificato.
$("#plus-one").click(function(){
$(".square").text(Number($(".square").text())+1);
$(".cubic").text(Number($(".cubic").text())+1);
view1.plusOne();
view2.plusOne();
});
Spero che questo sia utile per voi.
Questo sembra che potrebbe essere una domanda migliore per [recensione Codice] (http://codereview.stackexchange.com/) – Mathletics
Hum, si potrebbe essere giusto, ma, so che voglio astratta che il codice, quello che ho' chiedere è come farlo in Backbone in particolare, e se si usa un modello senza "tabella" va bene. – NicoSantangelo
Backbone o no, quando la tua domanda è "Ho questo codice, come posso cambiarlo" è la revisione del codice. Per la tua seconda domanda, "va bene per ..." di solito significa che è basata sull'opinione pubblica. Puoi aggiungere un modello? Certo che puoi! Dovresti? Non ne ho idea. Se quel "modello" è solo in esecuzione calcoli su _altri_ modelli, suona come si starebbe meglio con una classe di supporto (che è come un modello, ma non un 'Backbone' modello.) – Mathletics