TypeError:this.element.down(...)未定义 - Timeframe.js和Prototype

时间:2013-02-08 17:37:46

标签: javascript prototypejs typeerror

我目前正在使用名为Timeframe.js的JS脚本和Prototype javascript框架来创建日历窗口小部件。在我的本地副本中,它工作得很好,但是在我的暂存环境中,我收到以下javascript错误:

  

TypeError:this.element.down(...)未定义

     

this.element.down('div#'+ this.element.id +'_ container')。insert(calendar);

错误是指timeframe.js库文件中的第97行。它是以下方法的一部分:

// Scaffolding
createCalendar: function() {
  var calendar = new Element('table', {
    id: this.element.id + '_calendar_' + this.calendars.length, border: 0, cellspacing: 0, cellpadding: 5
  });
  calendar.insert(new Element('caption'));
  var head = new Element('thead');
  var row = new Element('tr');
  this.weekdayNames.length.times(function(column) {
    var weekday = this.weekdayNames[(column + this.weekOffset) % 7];
    var cell = new Element('th', { scope: 'col', abbr: weekday }).update(weekday.substring(0,3));
    row.insert(cell);
  }.bind(this));
  head.insert(row);
  calendar.insert(head);
  var body = new Element('tbody');
  (6).times(function(rowNumber) {
    var row = new Element('tr');
    this.weekdayNames.length.times(function(column) {
      var cell = new Element('td');
      row.insert(cell);
    });
    body.insert(row);
  }.bind(this));
  calendar.insert(body);
  this.element.down('div#' + this.element.id + '_container').insert(calendar);
  this.calendars.push(calendar);
  this.months = this.calendars.length;
  return this;
}, 

我还验证了this.element.id的内容是有效的。该值最终为'div #calendars_container',它是标记中存在的元素,因此DOM不会遗漏。

我一直无法确定此问题的根源,我确保我拥有最新版本的Prototype和Timeframe,但错误仍然存​​在。我一直用这种方式使用这些脚本已经有一段时间了,之前没有遇到过这种情况,有人能让我走上正轨吗?

1 个答案:

答案 0 :(得分:0)

我认为你需要分享更多的背景来解决这个问题。如果代码在本地运行良好但不在您的(可能是非现场的)暂存环境中运行,则可能是由于执行到达相关行时没有加载所有代码。

我看来你的代码片段在事件处理程序中;即使在到达此行之前加载了所有代码,也许存在时间问题,其中Prototype尚未使用this.element函数扩展down()对象?

最有可能的是,您的暂存环境之间的延迟时间越长,导致某些网络绑定功能一个接一个地执行,这与本地常规方式相反。

在这一行上设一个断点,看看会发生什么。