我正在为我的模板使用带有 Handlebars 的 BackboneJS。几乎在任何时候都可以正常工作。然而,在一个问题上,它并没有我想要的那么好。
在加载页面时,我需要数据库中的一些信息才能加载到页面中(带有把手)。我正在使用 jQuery 的 $.ajax() 来获取 JSON 对象中的数据。
起初,我在主干视图的初始化方法中运行了 $.ajax()。但是,有时(并非总是)数据没有出现在我的模板中。
作为测试,我现在将 $.ajax() 放入主干视图的渲染方法中。我没有再看到这个问题,但不幸的是,这并不意味着它不存在,因为它不会每次都发生。
编辑:我又遇到了同样的问题,所以不幸的是把它放在渲染中没有帮助。
那么我应该如何解决这个问题呢?
只是为了好玩......这是代码:
var OF = OF || {};
OF.ReferrerView = Backbone.View.extend({
el: '#content',
initialize: function() {
if (!OF.address || !OF.address.isValid()) {
OF.router.navigate('step/1', {trigger: true});
}
OF.customerReferrer = OF.customerReferrer || new OF.CustomerReferrer();
}
render: function() {
//save this in that ;)
var that = this;
var sendObj = {
"selectAdult": OF.address.adultTreatment
};
//get referrer info
$.ajax({
url: "php/fakeAPI/referrer.php",
type: "POST",
dataType: "json",
data: sendObj,
success: function(data) {
OF.customerReferrer.referrerTypes = data.referrerTypes;
}
});
OF.template.get('step4-step4', function(data) {
//set the source en precompile the template
var htmlSource = $(data).html();
var template = Handlebars.compile(htmlSource);
//fill template with object or ''
var compiled = template(OF.customerReferrer);
//now place the completely compiled html into the page
that.$el.html(compiled);
});
}
});