编程语言
首页 > 编程语言> > 包装JavaScript函数参考

包装JavaScript函数参考

作者:互联网

我有以下JavaScript代码,它按预期工作…

/** @jsx React.DOM */

var TreeView = React.createClass({
  render: function() {    
  return <div ref="treeview"></div>;  
  },
 componentDidMount: function() {
   console.log(this.props.onChange);
   var tree = $(this.refs.treeview.getDOMNode()).kendoTreeView({
     dataSource: ...,
     dataTextField: "Name",
     select: this.props.onChange
     }
   });
 }
});

var MyApp = React.createClass({   
  onChange: function(e) {    
    console.log(e);
    this.setState({key: e});
  },
  render: function() {
    return (
      <div>
        <TreeView onChange={this.onChange}/>  
        <GridView />         
      </div>
    );
  }
});

但是,使用kendo树视图,在选择树节点时,将传递整个节点.要获取底层密钥,我需要按如下方式处理节点:

select: function(e) { 
  var id = this.dataItem(e.node).id;
  this.props.onChange(id);
}

然而,我显然不是很正确,因为这里请原谅我的noobness,似乎在工作实例中正在使用对函数的引用,而在非工作实例中,函数实际上正在执行. ..或类似的东西:返回的错误消息是:

Cannot call method ‘onChange’ of undefined.

那么在调用onChange方法之前,我需要做什么才能引用提取键的函数?请注意,如果我的理解是正确的,则需要在MyApp类的上下文中执行onChange,以便任何子组件都会收到有关更改的通知.

编辑:我已尝试使用部分应用程序,但仍然不是那里.我已经更新了onChange例程以获取一个从节点返回密钥的函数

onChange: function(getKey, e) {      
  this.setState({Key: getKey(e)});
},

但我不确定如何连接它.

解决方法:

你的代码看起来大多正确.我相信你唯一的问题是你传递给树视图的select回调是用错误的范围调用的.请注意,您在函数中使用它来表示两个不同的东西(一个用于实际的树视图对象,另一个用于React组件).最简单的解决方案可能是存储对onChange函数的引用,如下所示:

componentDidMount: function() {
   var onChange = this.props.onChange;
   var tree = $(this.refs.treeview.getDOMNode()).kendoTreeView({
     dataSource: ...,
     dataTextField: "Name",
     select: function(e) { 
       var id = this.dataItem(e.node).id;
       onChange(id);
     }
   });
 }

希望这可以帮助.

标签:javascript,reactjs,react-jsx,kendo-treeview
来源: https://codeday.me/bug/20190624/1280705.html