我認爲Backbone View類是足夠抽象的。您只需在創建新的View實例時傳遞不同的選項。
我發現你把計算邏輯放在View的渲染方法中。由於Backbone是一個基於MVC的框架,因此邏輯應該放置在Model和View註冊事件處理程序中,該處理程序負責在Model激發哪個視圖感興趣的事件時對呈現佈局進行渲染。
在我看來,你可以添加一個模型來處理計算和重新定義你的視圖。
我的簡單示例:
1.定義一個模型,其是用於響應邏輯計算:
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 View類:
查看將登記偵聽模式「結果「數據更改事件並根據您分配的模型呈現初始佈局。
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.當你實例化一個新的視圖時,通過模型的不同選項。
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-one按鈕點擊事件處理程序:
您可以觀察View在更改模型時如何重新呈現其佈局。
$("#plus-one").click(function(){
$(".square").text(Number($(".square").text())+1);
$(".cubic").text(Number($(".cubic").text())+1);
view1.plusOne();
view2.plusOne();
});
希望這對你有所幫助。
這似乎是它可能是一個更好的問題[代碼評論](http://codereview.stackexchange.com/) – Mathletics
哼,你可能是對的,但是,我知道我想抽象的代碼,我問的是如何在Backbone中做到這一點,如果使用沒有「表格」的模型,那就沒問題。 – NicoSantangelo
骨幹與否,當你的問題是「我有這個代碼;我該如何改變它」這是代碼審查。對於第二個問題,「可以......」通常意味着它是基於意見的。你可以添加一個模型嗎?當然可以!你應該?我不知道。如果這個「模型」只是在其他模型上運行計算,聽起來好像用助手類(它就像一個模型,而不是'Backbone'模型)會更好。 – Mathletics