2016-09-16 137 views
1

我有以下reactjs代碼來生成ddlCategories被ddlCategories選擇加載的ddl產品的兩個下拉列表。但是當我調用函數getDataById()並試圖將ajax填充數組data2打印到alert()時,沒有alert()有兩個警報沒有提示警報。它所示的IE控制檯上此錯誤消息,爲什麼函數的函數不會被調用?

執行沒有達到功能getDataById()「CUS警報()該函數即使沒有執行

SCRIPT438:對象沒有按」噸支持屬性或方法 'getDataById'

校正:一旦this.props.getDataById的呼叫()改爲this.getDataById(),它的工作

但是如何填充ddlProducts下拉菜單。我如何訪問ddlProducts的標籤,然後將選項添加到它?

這裏是代碼:

var gdata=[]; 

var trStyle = { 
    'color': 'black', 
    'border-style' :'solid', 
    'margin-left':'20%' 
}; 

var HCOMP = React.createClass({ 
    getInitialState:function(){ 
    return{data1:[], data2:[], isMounted:false, selectedValue:0} 
}, 
componentDidMount:function(){ 
    this.getData(); 
    this.setState({isMounted:true}) 
}, 
ddlProdCatsChanegeEvent: function(e) { 

    if (this.state.isMounted) 
    { 
     var newV = ReactDOM.findDOMNode(this.refs.refProdCats).value;   
     var seleValue = newV; 

     this.setState({selectedValue:newV}, function(){ 

      this.getDataById(this.state.selectedValue); 
      alert(this.state.data2); 
     }); 
    } 
}, 
render: function() { 
    var prodCats = this.state.data1.map(function(ele, index){// <PRODCATSOPTION optValue={ele.ProductCategoryID} optText={ele.Name} /> 
     return <option value={ele.ProductCategoryID} data-key={index}>{ele.Name}</option> 
    }); 

    prodCats.unshift(<option value={''}>{'---- select category ------'}</option>) 

    return (<div>Prodcut Category:<br /><select id="ddlCategories" ref="refProdCats" onChange={this.ddlProdCatsChanegeEvent}>{prodCats}</select><br /> 
     Products:<br /><select id="ddlPorducts" ref="refProds"></select><br /></div> 
    ) 
}, 
getDataById:function(catId){ 
    var x = catId; 
    alert('rec id:'+x); 

    $.ajax({ 
     url:'http://localhost:53721//Home/GetProductCats?id='+ x, 
     method:'GET', 
     success:function(d1){ 
      this.setState({data2:d1}); 
     }.bind(this), 
     error:function(){ 
      alert('ERROR'); 
     }.bind(this) 
    }) 
}, 
getData:function(){ 
    //ajax here 
    $.ajax({ 
     url:'http://localhost:53721//Home/GetProductCats', 
     method:'GET', 
     success:function(d1){ 
      this.setState({data1:d1}); 
     }.bind(this), 
     error:function(){ 
      alert('ERROR'); 
     }.bind(this) 
    }) 
} 
}); 

var PRODOPTIONS = React.createClass({ 
    render:function(){ 
     return(<option value={this.props.optValue}>{this.props.optText}</option>) 
    } 

}); 

var PRODCATSOPTION = React.createClass({ 
    render:function(){ 
     return(<option value={this.props.optValue}>{this.props.optText}</option>) 
    } 

}); 




ReactDOM.render(<HCOMP/>, document.getElementById('d1')); 

回答

0

嘗試更新ddlProdCatsChanegeEvent到ddlPropCatsChangeEvent。

+0

我已經更新了代碼,而不是從道具中調用'getDataById',我稱它爲this.getDataById(this.state.selectedValue)。好消息是現在所有的警報顯示數據,但與我目前的代碼如何填充下拉ddlPorducts。我已經包括了裁判,但我如何將收藏添加到ddlPorducts? –

相關問題