0

我正在为我的模板使用带有 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);

        });

    }
});
4

1 回答 1

1

不要在视图中发出 ajax 请求。最好不要制作它们,而是使用正确配置的模型或集合子类,但如果您必须进行手动 ajax 调用,至少在模型中进行。然后让您的视图绑定到模型上的同步/更改事件并适当地渲染。

于 2013-09-14T08:50:04.683 回答