안녕하세요 여러분, 단추를 눌렀을 때 모델에 어떤 것을 추가 할 때 컬렉션에서 뷰를 표시하는 데 어려움이 있습니다. 새로 추가 된 사람이 zview에 표시됩니다. 아래 코드는 내 코드입니다. 구문 및 설명과 함께 어떤 도움이 apprecciated됩니다백본에서 모델 컬렉션의 뷰를 표시하는 방법
<div id="display">
<table id="personTable">
</table>
</div>
<script type="text/template" id="personInputTemplate">
<p>Person Name<input type="text" id="name" /></p>
<p>Person Age<input type="text" id="age" /></p>
<p><button id="login-btn">Save</button></p>
</script>
<script type="text/template" id="personDisplayTemplate">
<tr>
<td><span><%= name ? name : '' %></span></td>
<td><span><%= age ? age : '' %></span></td>
</tr>
</script>
<div id ="personEL"></div>
<div id="showPerson"></div>
$(document).ready(function(){
var Person = Backbone.Model.extend({
name: 'default name',
age: 100,
initialize: function(){
this.bind('change', this.render, this);
}
});
var PersonCollection = Backbone.Collection.extend({
model: Person
});
var PersonView = Backbone.View.extend({
el: $('#personEL'),
events:
{
"click #login-btn" : "loginClick"
},
loginClick: function()
{
var name = $('#name').val();
var age = $('#age').val();
var newPerson = new Person({name: name, age : age});
this.personCollection.add(newPerson);
var showit = new zview();
},
initialize: function(){
this.personCollection = new PersonCollection();
this.render();
},
render: function()
{
var template = _.template($("#personInputTemplate").html(), {});
this.el.html(template);
}
});
zview = Backbone.View.extend({
el: $('#personTable'),
initialize: function()
{
model: Person,
this.render();
}
,
render: function()
{
var template = _.template($('#personDisplayTemplate').html(),this.Person.toJSON());
console.log(template);
this.el.html(template);
}
});
var persons = new PersonView();
});
html 코드. kinakuta의 의견을보고뿐만 아니라 감사
두 가지 사실을 알았습니다 (미안하지만 더 이상 분석 할 시간이 없습니다). 하나는 모델의 변경 이벤트를 모델의 렌더링 함수에 바인딩하는 것입니까? 기본적으로 모델에는 렌더링이 없습니다. 이는 뷰를위한 것입니다. 둘째 : zview의 렌더링 함수에서 this를 참조합니다 .Person.toJSON() - Person은보기의 변수이며보기의 변수가 아닙니다. 이걸 모델로 말할거야 .JSON. – kinakuta