【问题标题】:Uncaught TypeError: Cannot read property 'parentNode' of undefined未捕获的类型错误:无法读取未定义的属性“parentNode”
【发布时间】:2014-07-26 16:52:11
【问题描述】:

我以前从未得到过这个,我只能假设它也找不到它正在尝试渲染的div 元素?这没有任何意义,因为当我 console.log 在事件触发之前和之后有问题的元素存在时,它存在,但是会抛出错误 ....

下面是一个主干视图——渲染一个 reactjs 组件,我们传入deleteEvent: this.handleDeleteEvent.bind(this),它允许我们连续单击删除,它将冒泡事件并遍历,本质上是重新调用集合并重新渲染组件。

但它是导致手头问题的React.renderComponent()

AisisWriter.Views.PostIndex = AisisWriter.Views.CoreView.extend({

  writer_posts: new AisisWriter.Collections.Posts(),

  handleDeleteEvent: function(id){
    var toDelete = new AisisWriter.Models.Post();
    toDelete.set({id: id});
    toDelete.destroy().then(this.deleted(id), this.failedToDelete);
    return false
  },

  deleted: function(id) {
    var options = { reset: true };
    this.writer_posts.fetch(options).then(this.postsRecieved.bind(this), this.serverError);
  },

  postsRecieved: function(collection, response, options) {
    this.render(collection);

    if ($('#flash-error').is(':visible')){
      $('#flash-error').hide();
    }

    $('#flash-success').show();
  },

  serverError: function() {
    if ($('#flash-success').is(':visible')){
      $('#flash-success').hide();
    }

    $('#flash-error').show();
  },

  failedToDelete: function() {
    if ($('#flash-success').is(':visible')){
      $('#flash-success').hide();
    }

    $('#flash-error').show();
  },

  render: function(postsObject) {
    element = this.getElement();

    var totalPerPage = postsObject.total_pages.total;
    var posts = postsObject.posts;

    React.renderComponent(new PostTable({posts: posts, maxPages: totalPerPage, deleteEvent: this.handleDeleteEvent.bind(this)}), element);
  }

});

第一次渲染 - 很好用。您会看到一个带有帖子的表格,然后单击删除它一直到 - 从模型中删除它,一直调用集合进行渲染。从那里它获取总页数、帖子,然后将它们传递给组件,在那个阶段我得到:

Uncaught TypeError: Cannot read property 'parentNode' of undefined

有人有什么想法吗?

【问题讨论】:

    标签: javascript backbone.js reactjs


    【解决方案1】:

    在您的 PostTable 组件中,您是否明确呈现了 <tbody> 元素?某些浏览器会在初始渲染后自动添加一个,这可能会导致此问题。显式渲染 <tbody> 应该可以解决问题。

    【讨论】:

    • 我在 chrome 中,我没有渲染 tbody 我正在做 <div> <table> ... </table></div> 虽然......我的反应组件实际上渲染了整个表格,然后他们的子组件在那里渲染行。
    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2015-01-06
    • 2017-07-26
    相关资源
    最近更新 更多