백본 뷰 클래스는 충분히 추상적이라고 생각합니다. 새 View 인스턴스를 만들 때 다른 옵션을 전달하면됩니다.
그리고 계산 논리를 View의 렌더링 메소드에 배치 한 것으로 나타났습니다. Backbone은 MVC 기반 프레임 워크이기 때문에 View가 관심을 갖는 Model fire 이벤트가 발생할 때 레이아웃 렌더링을 담당하는 Model 및 View 레지스터 이벤트 핸들러에 로직을 배치해야합니다.
내 의견으로는, 계산하고보기를 재정의하는 모델을 추가 할 수 있습니다.
내 간단한 예 :
1.Define 계산 로직에 대한 응답입니다 모델 :
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();
});
희망이 도움이 될 것입니다.
[Code Review] (Code Review) (http : //codereview.stackexchange.com/)에 대해 더 좋은 질문 인 것처럼 보입니다. – Mathletics
Hum, 당신은 옳을 수도 있지만, 나는 그 코드를 추상화하고 싶습니다. 질문은 특히 백본에서 어떻게해야하는지 묻고, "테이블"이없는 모델을 사용한다면 괜찮습니다. – NicoSantangelo
질문이 "이 코드가 있는데 어떻게 변경합니까?"라는 코드 검토가있을 때 백본이든 아니든간에. 귀하의 두 번째 질문에 대해, "괜찮습니까 ..."는 일반적으로 의견을 기반으로한다는 것을 의미합니다. 모델을 추가 할 수 있습니까? 물론 당신은 할 수! 너? 나는 모른다. 그 "모델"이 단지 _other_ 모델들에 대한 계산을 실행하고 있다면, 당신은 헬퍼 클래스 (모델과 같은 것일뿐,'백본 모델이 아닙니다.)를 사용하는 것이 더 좋을 것 같습니다. – Mathletics