Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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 Backbone.js:使用Ajax将数据绑定到集合?_Javascript_Ajax_Backbone.js - Fatal编程技术网

Javascript Backbone.js:使用Ajax将数据绑定到集合?

Javascript Backbone.js:使用Ajax将数据绑定到集合?,javascript,ajax,backbone.js,Javascript,Ajax,Backbone.js,我刚刚开始使用Backbone.js。我想创建一个集合并从外部源添加一些数据 数据目前实际上是CSV格式的,而不是JSON格式的,但是如果这要容易得多的话,我可以用JSON格式重新呈现它 因此,有两个问题: 在何处将外部数据绑定到集合?如果我没有指定url属性,它会抱怨,但我实际上没有考虑url——我计划通过Ajax绑定数据 我是否应该用JSON而不是CSV重新呈现数据,并使用集合的url属性加载数据 我只是尝试直接将数据加载到集合中,而不是通过url属性: var Cat = Backbone

我刚刚开始使用Backbone.js。我想创建一个集合并从外部源添加一些数据

数据目前实际上是CSV格式的,而不是JSON格式的,但是如果这要容易得多的话,我可以用JSON格式重新呈现它

因此,有两个问题:

  • 在何处将外部数据绑定到集合?如果我没有指定
    url
    属性,它会抱怨,但我实际上没有考虑url——我计划通过Ajax绑定数据
  • 我是否应该用JSON而不是CSV重新呈现数据,并使用集合的
    url
    属性加载数据
  • 我只是尝试直接将数据加载到集合中,而不是通过
    url
    属性:

    var Cat = Backbone.Model.extend({});
    var CatCollection = Backbone.Collection.extend({
        model: Cat
    });
    var ajaxData = { 'breed' : 'persian' } // simple example of external data
    var catCollection = new CatCollection(ajaxData);
    catCollection.fetch();
    

    但这会产生一个错误:
    未捕获错误:必须指定“url”属性或函数

    使用在别处创建的数组初始化/重置集合,而不使用集合的fetch方法

    var ajaxData = [{ 'breed' : 'persian' }]; // Backbone.Collection expects an array
    var catCollection = new CatCollection(ajaxData);
    // catCollection.fetch(); fetch will try to update the data from the server
    
    或者使用内置的url/parse来构建模型

    var CatCollection = Backbone.Collection.extend({
        model: Cat,
        url: "your ajax source",
        parse: function (csv) {
            //convert your csv in an array of objects
            return csvtoarray;
        },
        fetch: function (options) {
            options = options || {};
            options.dataType = "text";
            return Backbone.Collection.prototype.fetch.call(this, options);
        }
    });
    var catCollection = new CatCollection();
    catCollection.fetch();
    

    将数据服务器端转换为JSON可能比尝试用JS编写CSV解析器更容易。

    但是您需要一个用于ajax调用的url。哦,如果我指定该url并且它是JSON,它应该“正常工作”?如果URL是CSV文件会发生什么?第二种方法——覆盖解析——显然更可取,但据我所知,它不起作用:sync方法在没有接收到JSON时会抛出错误,因此永远不会调用解析。我认为您需要做的是重写Backbone.sync和parse。不管怎样,我还是要试一试。@TomP你说得对,它缺少一个数据类型。不过,重写fetch就足够了。