【问题标题】:How to get the api returned data from a collection?如何从集合中获取 api 返回的数据?
【发布时间】:2013-03-14 13:41:09
【问题描述】:

我有以下从 api 获取数据的集合:

var Data = Backbone.Collection.extend({
    url: '/* api url - working */',

    sync: function(method, model, options) {
        options.timeout = 10000;
        options.dataType = "jsonp";
        return Backbone.sync(method, model, options);
    }
});

我想在视图中显示它:

var MyView = Backbone.View.extend({
    el : '.myview',
    render : function () {
        var data = new Data();
        var that = this;

        data.fetch({
            success : function (data) {
                console.log(arguments);
                console.log(data);

                var template = _.template( $('#temp').html(), {data: data.models} );
                that.$el.html(template);
            }
        });
    }
});

我不明白的是,当我登录 arguments 时,我得到了 api 数据,它有一个奇怪的结构:{0:child, 1:object\* contains the api data *\, 2:object} 但是当我登录 data 时,我只得到 child

我不明白这个结构,我缺少什么以及如何从中获取 api 数据?

【问题讨论】:

    标签: api backbone.js collections model


    【解决方案1】:

    Collection.fetch 正在使用 3 个参数(来自 Backbone source)调用您传入的成功函数:

    success(collection, resp, options);
    

    arguments 是所有 javascript 函数中的特殊局部变量。看看这个documentation

    所以,记录 arguments 显示传递给 success 函数的 3 件事,而记录 data 只显示传入的第一件事。即使您的函数只有一个参数,仍然传递了三件事它。

    传递给success 的第一件事是骨干集合本身。所以,你需要用它做什么取决于你的模板是什么样的。通常只将 JSON 传递给模板函数:_.template( $('#temp').html(), {data: data.toJSON()} )。然后在模板中,您需要遍历这些 JSON 对象。

     <% _.each(data, function(item){ %>
         <div><%= item.foo %></div>
     <% }); %>
    

    【讨论】:

    • 我的困惑是为什么我从 api 收到的实际数据是第二个参数,而不是第一个?什么是名为child 的对象?从您的解释看来,我以正确的方式使用视图和集合
    • 第二个参数是ajax 传递给它的success 回调函数(Backbone.sync 中定义的,不是你的)。通常,您不需要使用它,因为集合(第一个参数)已经是 reset 与该数据。也许在你的success 函数中尝试console.log(data.toJSON());,这可能会帮助你更多地理解它。这应该打印出带有每个模型属性的 JSON 数组。
    • 在第一个参数中我没有得到 ajax 数据,只有在第二个参数中,它没有 ajax 数据的集合是否有问题?
    • console.log(data.toJSON()); 打印了什么?第一个参数不是ajax数据,它是一个Backbone Collection实例,ajax数据解析成Backbone Models
    猜你喜欢
    • 2021-11-01
    • 2014-10-07
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多