Javascript 主干及;使用非JSON数据
我有一个静态文件,每行只有一个日期时间,例如:Javascript 主干及;使用非JSON数据,javascript,ajax,backbone.js,Javascript,Ajax,Backbone.js,我有一个静态文件,每行只有一个日期时间,例如: 2014-03-14T16:32 2014-03-15T13:04 2014-03-16T06:44 ... 我想将其用作主干收集的只读数据源。显然,这不是预期的格式。我想我可以在我的集合上使用parse方法将其转换成一个适当的对象数组。不幸的是,这似乎不起作用 首先,如果我不重写fetch,解析方法就永远不会被调用——它会进入错误处理程序,尽管不知道确切的原因——它实际上不会抛出任何错误。我猜这是因为它期待一个不同的响应类型还是什么 第二,如果
2014-03-14T16:32
2014-03-15T13:04
2014-03-16T06:44
...
我想将其用作主干收集的只读数据源。显然,这不是预期的格式。我想我可以在我的集合上使用parse方法将其转换成一个适当的对象数组。不幸的是,这似乎不起作用
首先,如果我不重写fetch,解析方法就永远不会被调用——它会进入错误处理程序,尽管不知道确切的原因——它实际上不会抛出任何错误。我猜这是因为它期待一个不同的响应类型还是什么
第二,如果我同时重写fetch和parse方法,那么:
var MyColl = Backbone.Collection.extend({
model: MyModel,
url: 'date-list.txt',
parse: function(data) {
var result = _(data.split("\n")).compact().map(function(item, i) {
return { theDate: item, globalIndex: i };
});
return result;
},
fetch: function() {
$.get(this.url, this.parse);
}
});
它正确地进入了parse,parse似乎构建了一个有效的对象,但是在整个操作之后,我的集合有0个模型
我假设集合结束时是空的,因为当我调用parse时,它不再是预期流的一部分,因此对结果不做任何处理。关于如何使fetch正确处理服务器返回的内容,还有其他想法吗
显然,我可以让服务器返回JSON,也可以在主干网之外使用我自己的抓取功能,但我希望有办法避免这些想法。我相信默认的抓取方法假设您将从端点返回JSON,然后集合将根据JSON数据为数组中的每个对象实例化一个新模型 使用当前覆盖,您只需在解析方法中构建一组主干模型:
parse: function(data) {
var model = this.model;
var result = _(data.split("\n")).compact().map(function(item, i) {
return new model({ theDate: item, globalIndex: i });
});
return result;
},
看起来您没有将正确的函数传递给
$。获取,或者更准确地说,传递正确的函数,但没有绑定到特定的对象实例。一个想法是尝试以下方法:
$.get(this.url, _.bind(this.parse, this));
但是现在,正如您所说的,对parse
方法的结果没有做任何处理,所以您可以像这样向集合中添加元素:
parse: function(data) {
var result = _(data.split("\n")).compact().map(function(item, i) {
return { theDate: item, globalIndex: i };
});
this.set(result);
}
这就是我正在做的。除非重写fetch,否则永远不会调用parse方法。它进入错误处理程序,但不清楚原因。(我应该在描述中更清楚地说明这一点。)哦,我只是想说,我认为您必须遵循第二种方法,即重写fetch和parse,因为fetch需要JSON。您只需对当前返回的新模型({theDate:item,globalIndex:i})
(请参见上文)的代码稍作修改,即可正确填充集合。No No No No modHFGen.dll。我可以发誓,在过去的Collection.fetch()
中,我返回了一个对象数组,而不是一个模型数组。不过,这似乎行得通,谢谢。再想一想,还是不行。即c=新的MyColl();c、 fetch();console.log(c.length)=>0;