관련하여 몇 가지 질문이 있지만 그 대답은 구현하기가 분명하지 않습니다. 그래서 내가이 질문을 다시 한 번 묻는 이유는 명확하고 간단한 대답을 할 수 있기 때문입니다.백본 : 가져온 항목이 있어도보기에 렌더링되지 않음
난 항상 백본에서 Collection
과 관련하여 문제가 있었으며, 특히 JSON 데이터로 채우는 데 어려움이있었습니다.
Firebug에서 서버에서 가져온 것이지만 화면이 여전히 비어있는 경우에도보기에서 렌더링 할 수없는 것처럼 보입니다. 또한 console.log('callers: ', this.callerList)
을 수행하면 models=[0]
인 객체가 반환됩니다. 그러나 오브젝트를 확장하면 models
은 JSON 파일의 데이터로 가득 차 있습니다. 백본에서 어떤 일이 벌어지고 있으며 결과가 혼란 스럽습니까?
누군가 어떻게 내게 설명 할 수 있습니까? 나는이 시대와 싸우고 있었고 그 주위에 머리를 들이지 못했습니다.
많은 감사
JS :
(function($, window) {
// model
var CallerModel = Backbone.Model.extend({});
// collection
var CallersList = Backbone.Collection.extend({
model: CallerModel,
url: 'js/json/callers.json'
});
// view
var CallerView = Backbone.View.extend({
el: '.caller-app',
template: _.template($('#callers-template').html()),
initialize: function() {
this.callerList = new CallersList();
this.callerList.fetch();
this.callerList.bind('reset', this.render);
console.log('caller: ', this.callerList);
},
render: function(e) {
console.log('RENDER');
_.each(this.collection.models, function(caller) {
this.$el.append(this.template(caller.toJSON()));
console.log('callerList: ', caller);
}, this);
return this;
}
});
// start
var callerView = new CallerView();
}(jQuery, window));
HTML :
<!-- wrapper -->
<div class="wrapper">
<h1>Missed Calls App</h1>
<div class="caller-app"></div>
</div>
<!-- wrapper -->
<!-- templates -->
<script type="text/template" id="callers-template">
<div class="caller">
<h2><%= title %> <%= name %> called</h2>
<h3>From <%= agency %></h3>
<p>When: <%= when %></p>
<p>Contact: <%= tel %></p>
<p>Says:"<%= message %>"</p>
</div>
</script>
<!-- templates -->
JSON :
[
{
"id": 1,
"title": "Mrs",
"name": "Mui",
"agency": "Ryuzanpaku Dojo",
"when": "evening",
"tel": "0207 123 45 67",
"message": "Check your availability"
},
{
"id": 2,
"title": "Mrs",
"name": "Shigure",
"agency": "Ryuzanpaku Dojo",
"when": "evening",
"tel": "0207 123 45 67",
"message": "Check your availability"
}
]
명백한 문제는 없습니다. breakpoint를'this. $ el.append (this.template (caller.toJSON()));'에 두는 것이 좋습니다. 호출자가 정확하고 caller.toJSON()이 자신이 생각하는 바를 반환하는지 확인하십시오. this.template이 올바른지, $ el가 올바른지 등을 확인하십시오. – Neil
@Neil 응답에 감사드립니다. render 함수에'console.log'를 추가하여'caller' 내부에 무엇이 있는지 보았습니다. 그러나'render'가 적용되지 않는 것처럼 보입니다. – Shaoz
컬렉션을 반복하려고했지만 실제로 지정하지 않았습니다. 또한 this.collection 대신 this.model을 사용하고 있습니다. – Jack