ID가있는 템플릿 html로 링크 된 마리오네트 뷰의 다중 뷰 인스턴스를 만들면 이러한 뷰의 여러 인스턴스에 대해 복제됩니다.Backbone/Marionette보기 인스턴스를 사용할 때 동일한 ID를 가진 여러 DOM 요소를 피할 수 있습니까?
올바르게 작동하는 동안 구조적으로 올바른 방법을 사용해야한다고 생각합니다.
예제 코드는 아래와 같습니다.
Template:
<script id="myTemplate" type="text/template">
<div id="myDiv">
<input type="text" id="myText"/>
<input type="button" id="myBtn" value="Click me!"/>
</div>
</script>
View:
MyView = Backbone.Marionette.ItemView.extend({
template: '#myTemplate',
events: {
'click #myBtn' : 'myFunc' //Correctly identifies its own 'myBtn'
},
myFunc : function() {
alert($('myText').val()); //Again, picks own 'myText'
}
});
var v1= new MyView();
v1.render();
var v2= new MyView();
v2.render(); //Duplicate IDs now present in DOM
DOM 요소와 ID가 고유해야합니다. 모델을이보기에 연결하는 경우에도 이러한 DOM 요소를 식별 할 수있는 방법이 필요합니다.
ID를 복제하지 않고이를 수행하는 올바른 방법은 무엇입니까? 당신이
var v1= new MyView({ id: "view" + number});
v1.render();
다음 :
템플릿 :
<script id="myTemplate" type="text/template">
<input type="text" class="js-myText"/>
<input type="button" class="js-myBtn" value="Click me!"/>
</script>
보기 정의 :
MyView = Backbone.Marionette.ItemView.extend({
template: '#myTemplate',
events: {
'click #myBtn' : 'myFunc' //Correctly identifies its own 'myBtn'
},
myFunc : function() {
alert($('myText').val()); //Again, picks own 'myText'
}
});
Instanciation을 만들 때
감사합니다. 이것은 동일한 템플리트에서 작동하는 뷰의 다중 인스턴스에 대해서도 모델에 정적으로 바인딩하는 동안 별도의 고유 한 ID를 생성하는 데 유용해야합니다. 이렇게하면 DOM의 고유 속성을 위해 클래스 속성을 사용하도록 강요하지 않을 것입니다 (이 속성은 사용하도록 설계되지 않았습니다). 이것은 확실히 조사하고 채택하는 가치가있는 것 같습니다. – class
jQueryUI의 탭은 최근 div 항목에 대한 ID를 요구하는 시나리오 중 하나입니다. 탭보기를 인스턴스화하면 이러한 ID가 페이지에 복제되어 HTML이 유효하지 않게됩니다. 이 솔루션은이 경우에 도움이됩니다. – Nemisha