我已經使用下劃線模板配置了一個簡單的骨幹模型和視圖。完全相同的配置用於兩個獨立的API。渲染沒有被調用一個API並且是另一個
API 1按預期工作。
要重現該問題,註釋掉的URL API 1,取消對URL的API 2.
正如你可以看到我已經規範了兩種API響應數據,完全相同的數據結構爲兩個apis返回。但是,不調用API 2的渲染方法。更奇怪的是,在極少數情況下渲染確實被API 2調用。
我在這裏丟失了什麼?
// Model
var Quote = Backbone.Model.extend({
// API 1
//urlRoot: 'http://quotes.stormconsultancy.co.uk/quotes/1.json',
// API 2
urlRoot: 'http://quotes.rest/qod.json',
parse: function (data){
try{
data = data['contents'].quotes[0];
}
catch(e){
}
var rd = {author:data.author, quote:data.quote}
console.log("parsed", typeof rd, rd);
return rd;
},
// UPDATE as suggested by cory
initialize: function() {
this.on('all', function(eventName) {
console.log('QuoteModel: ' + eventName);
});
}
});
// View
var QuoteView = Backbone.View.extend({
initialize: function() {
this.template = _.template($('#quote-template').html());
this.listenTo(this.model, 'change', this.render);
},
render: function(){
console.log("render", this.model.attributes)
this.$el.html(this.template(this.model.attributes));
}
});
var quoteM = new Quote();
quoteM.fetch();
$(document).ready(function() {
\t var quoteV = new QuoteView({
\t \t el: $('#quote'),
\t \t model: quoteM
\t });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>
<script type="text/html" id="quote-template">
\t \t <p>The author is : <%= author %></p>
\t \t <p>The content is : <%= quote %></p>
</script>
<div id="quote"></div>
謝謝!不能相信我錯過了這一點。 – arctelix
@arctelix我已經將Backbone的最佳實踐添加到了我的答案中。 –
感謝您的更新答案! – arctelix