Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 主干及;使用非JSON数据_Javascript_Ajax_Backbone.js - Fatal编程技术网

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;