moment:Array.prototype.some调用null或undefined

时间:2016-04-18 17:59:50

标签: javascript backbone.js momentjs daterangepicker bootstrap-daterangepicker

仍然遇到以下问题。上周我没有问题,我没有更改任何代码: 我在这里使用daterangepicker:http://www.daterangepicker.com/#usage

我的js代码:

for issueId, status in resultList:
    # Do stuff with issueId and status

登录console.log如下:

const Backbone = require('backbone');
const dutils = require('dutils');
const FilterGroupView = require('./filterGroupView');
const _ = require('underscore');
const $ = require('jquery');
const moment = require('bootstrap-daterangepicker/moment');
require('bootstrap-daterangepicker');

const ranges = {
  'Today': [moment().startOf('day'), moment()],
  'Yesterday': [moment().subtract(1, 'days').startOf('day'), moment().subtract(1, 'days').endOf('day')],
  'Last 7 Days': [moment().subtract(7, 'days'), moment()],
  'Last 30 Days': [moment().subtract(30, 'days'), moment()],
  'This Month': [moment().startOf('month'), moment().endOf('month')],
  'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
};

$('#dateForm').val(moment().subtract(7, 'days').format('YYYY-MM-DD HH:mm') + ' - ' + moment().format('YYYY-MM-DD HH:mm'));
console.log('ranges:' + JSON.stringify(ranges) ); // eslint-disable-line no-console
$('#dateForm').daterangepicker({
  format: 'YYYY-MM-DD HH:mm',
  minDate: new Date(2014, 0, 1),
  maxDate: new Date(),
  timePicker: true,
  timePickerIncrement: 30,
  showDropdowns: true,
  ranges: ranges, // Here
}, (start, end, label) => {
  $('#dateForm').val(start.format('YYYY-MM-DD HH:mm') + ' - ' + end.format('YYYY-MM-DD HH:mm'));
  if (label !== 'Custom Range') {
    this._relative_date = label;
  } else {
    this._relative_date = false;
  }
});

上面的日志显示范围正常。 console.log中的错误如下。如果我在上面的代码中删除了“range:ranges,// Here”,则错误将消失。我无法弄清楚原因。

analytics.bundle.js?v=v1.71:2 ranges:{"Today":["2016-04-18T04:00:00.000Z","2016-04-18T17:51:28.384Z"],"Yesterday":["2016-04-17T04:00:00.000Z","2016-04-18T03:59:59.999Z"],"Last 7 Days":["2016-04-11T17:51:28.385Z","2016-04-18T17:51:28.385Z"],"Last 30 Days":["2016-03-19T17:51:28.385Z","2016-04-18T17:51:28.385Z"],"This Month":["2016-04-01T04:00:00.000Z","2016-05-01T03:59:59.999Z"],"Last Month":["2016-03-01T05:00:00.000Z","2016-04-01T03:59:59.999Z"]}

错误详情:

Uncaught TypeError: Array.prototype.some called on null or undefined

package.json的一部分:

c   @   analytics.bundle.js?v=v1.71:16
Ue  @   analytics.bundle.js?v=v1.71:17
me  @   analytics.bundle.js?v=v1.71:17
n.setOptions    @   analytics.bundle.js?v=v1.71:16
n   @   analytics.bundle.js?v=v1.71:16
(anonymous function)    @   analytics.bundle.js?v=v1.71:16
vt.extend.each  @   commons.bundle.js?v=v1.71:14
vt.fn.vt.each   @   commons.bundle.js?v=v1.71:14
$.fn.daterangepicker    @   analytics.bundle.js?v=v1.71:16
t.exports.i.View.extend.initialize  @   analytics.bundle.js?v=v1.71:2
e.View  @   commons.bundle.js?v=v1.71:31
n   @   commons.bundle.js?v=v1.71:32
t.exports.i.View.extend.initialize  @   analytics.bundle.js?v=v1.71:1
e.View  @   commons.bundle.js?v=v1.71:31
n   @   commons.bundle.js?v=v1.71:32
(anonymous function)    @   analytics.bundle.js?v=v1.71:1
h   @   commons.bundle.js?v=v1.71:24
c.fireWith  @   commons.bundle.js?v=v1.71:24
vt.extend.ready @   commons.bundle.js?v=v1.71:24
c   @   commons.bundle.js?v=v1.71:14

4 个答案:

答案 0 :(得分:4)

该问题似乎来自于11小时前从现在开始发布的2.13.0时刻。我假设您的日期选择器使用时刻作为依赖。

与此同时......这应该通过降级版本暂时解决您的问题。 npm uninstall moment npm i moment@2.12.0

更新:我创建了一个问题来跟踪此问题。 https://github.com/moment/moment/issues/3124

答案 1 :(得分:1)

来自Moment团队:我们相信您在这里看到的问题是,由于打包,2.13版本之前的Moment对象将被传递到2.13中的时刻功能。由于2.13中内部变量的更改,事情无法正常工作。

目前,将时刻降级为2.12将解决问题。

我们将与更受欢迎的图书馆的一些作者交谈,并了解我们能做些什么。我们将跟踪https://github.com/moment/moment/issues/3124中的进度,如其他答案中所述。

答案 2 :(得分:0)

将moment.js更新为最新版本的2.24.0为我解决了此问题。它也解决了另一个问题,向我们显示了交货日期为空白的记录。更新为最新版本后,这些空白记录停止出现。

答案 3 :(得分:0)

对于遇到此问题的其他人,当我尝试发出其POST正文是具有Moment实例值的对象的HTTP请求时,我遇到了此问题:

body = {
  foo: moment()
}

它无法正确地序列化moment()实例,我通过转换为ISO8601字符串来解决:

body = {
  foo: moment().toISOString()
}