Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript BackBoneJS哪种方法最好?获取+;成功还是失败_Javascript_Json_Ajax_Backbone.js - Fatal编程技术网

Javascript BackBoneJS哪种方法最好?获取+;成功还是失败

Javascript BackBoneJS哪种方法最好?获取+;成功还是失败,javascript,json,ajax,backbone.js,Javascript,Json,Ajax,Backbone.js,我有一个主干应用程序,我从后端API获取主干视图中的数据,然后调用函数render,用我获取的数据呈现模板 我想知道哪一种是获取和渲染的最佳实践,以及为什么 1-使用fetch,然后在success上调用render: define( ['models/object', 'text!templates/home.html', 'backbone' ], function(ObjectModel, HomeTemplate, Backbone

我有一个主干应用程序,我从后端API获取主干视图中的数据,然后调用函数
render
,用我获取的数据呈现模板

我想知道哪一种是获取和渲染的最佳实践,以及为什么

1-使用fetch,然后在
success
上调用
render

define(
    ['models/object',
        'text!templates/home.html',
        'backbone'
    ],
    function(ObjectModel, HomeTemplate, Backbone) {
        var homeView = Backbone.View.extend({

            initialize: function(options) {
                var self = this;
                this.homeTemplate = _.template(HomeTemplate);

                this.object = new ObjectModel({
                    id: <ANY_ID>
                }); 

                this.object.fetch({
                    success: function() {
                        self.render(self.object);
                    }
                });

            },
            render: function(data) {
                this.$el.html(this.homeTemplate);
                console.log(data);
                return this;
            },

        });

        return homeView;

    });

这取决于您的应用程序。如果您希望在模型的每一个小更改上更新整个视图,那么您需要绑定到
更改
(这可能对性能非常不利),或者根据您的应用程序绑定任何其他事件的类似内容。如果您自己处理小型DOM更新,并且只需要初始视图渲染,那么在获取之后,您只能渲染整个模板一次。基于这个小小的例子,你的问题没有真正的答案。它需要更广泛的应用程序视图、视图的内容和数据管理等。您不能决定应用程序中此视图需要什么吗?你到底为什么要问这个问题?谢谢你的评论,不,我不会有微小的改变,我只会在表格中显示对象,然后当单击一行时,你会被重定向到该对象的页面。我提出了这个问题,因为我不是前端专家,我希望遵循最佳实践,特别是当有几种方法导致“相同”的结果时。那么你肯定不想绑定到
更改
事件。如果您的视图希望再次获取数据并在以后由于某些用户操作而重新渲染,则可以绑定到
sync
事件。如果它只提取一次数据并显示它-在模型/集合提取成功后进行渲染就可以了。不要在上使用
bind
,更喜欢
this.listeno(this.object,'sync',callback)
。您不需要
self
,因为
fetch
可以为回调提供
context
选项。
define(
    ['models/object',
        'text!templates/home.html',
        'backbone'
    ],
    function(ObjectModel, HomeTemplate, Backbone) {
        var homeView = Backbone.View.extend({
            initialize: function(options) {
                var self = this;
                this.homeTemplate = _.template(HomeTemplate);

                this.object = new ObjectModel({
                    id: <ANY_ID>
                });

                this.object.bind('change', this.render, this);
                this.object.fetch()

            },
            render: function(data) {
                this.$el.html(this.homeTemplate);
                console.log(data);
                return this;
            },

        });

        return homeView;

    });