Javascript Backbone.js:使用Ajax将数据绑定到集合?
我刚刚开始使用Backbone.js。我想创建一个集合并从外部源添加一些数据 数据目前实际上是CSV格式的,而不是JSON格式的,但是如果这要容易得多的话,我可以用JSON格式重新呈现它 因此,有两个问题: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
url
属性,它会抱怨,但我实际上没有考虑url——我计划通过Ajax绑定数据李>
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就足够了。