2014-09-24 93 views
0

我想呈現一個jQuery Mobile風格的列表,但使用React JS。不幸的是,React JS沒有渲染jQuery Mobile組件的風格。因此按鈕顯示爲純HTML按鈕,就像我直接將HTML放在DOM中一樣,它將它呈現在jQuery Mobile Style中。React JS和jQuery Mobile Rendering

下面是我的代碼和截圖進行比較:

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset='UTF-8'> 
<link rel="stylesheet" href="../jqueryMobile/jquery.mobile.css"> 
<script src='../libs/react.js'></script> 
<script src='../libs/JSXTransformer.js'></script> 
<script src="../jquery/jquery.js"></script> 
<script src="../jqueryMobile/jquery.mobile.js"></script> 
<script src="scripts/shoppingItems.js"></script> 

    <!--<li><a href="#"> 
        <img src="images/book.png"> 
        <h2>Broken Bells</h2> 
        <p>Broken Bells</p> 
        <p style="font-weight:bold">Books</p> 
        </a> 
       </li> --> 
<script type="text/jsx"> 
    /** @jsx React.DOM */ 


    var SearchProductsBar = React.createClass({ 
     handleChange: function() 
     { 
      this.props.onUserInput(
       this.refs.filterTextInput.getDOMNode().value 
      ); 
     }, 
     render: function() 
     { 
      return(
       <input type="text" placeholder="Search Products" style={{width:'100%'}} ref="filterTextInput" onChange={this.handleChange}/> 
      ); 
     } 
    }); 

    var mainDivStyle = {width:'100%',color:'blue',backgroundColor:'#D5D1FF'}; 

    var divStyle1={ 
     width:'30%', 
     float:'left', 
     display:'inline', 
     paddingTop:'30px', 
     paddingLeft:'2%' 
    }; 

    var divStyle2={ 
     width:'65%', 
     float:'left', 
     display:'inline', 
     paddingLeft:'2%' 
    }; 

    var imageStyle={ 
     width:'100%', 
     height:'80px', 
     maxWidth:'80px' 
    }; 

    var ListItem = React.createClass({ 
     render: function() 
     { 
      var productItemObject = this.props.itemDetails; 

      return(

        <div style={mainDivStyle}> 
         <a href='#myShoppingCartHomePage2' style={{textDecoration:'none'}}> 
          <div style={divStyle1}> 
           <img src={productItemObject.image} style={imageStyle}/> 
          </div> 
          <div style={divStyle2}> 
           <h4>{productItemObject.name}</h4> 
           <h5>{productItemObject.price} INR</h5> 
           <p style={{fontWeight:'bold'}}>{productItemObject.category}</p> 
          </div> 
         </a> 
         <input type="button" value="Add To Cart" /> 
         <p>_________</p> 
        </div> 
      ); 
     } 
    }); 

    var ProductsTable = React.createClass({ 
     render:function() 
     { 
      var productList = this.props.productList; 
      var rows = []; 

      productList.forEach(function(productItem){ 
       if(productItem.name.indexOf(this.props.filterText) === -1) 
       { 
        return; 
       } 
       rows.push(<ListItem itemDetails={productItem}/>); 
      }.bind(this)); 

      return(
       <span> 
        <div id="myItemListHeader" style={{fontWeight:'bold'}}>Products:</div> 
        {rows} 
       </span> 
      ); 
     } 
    }); 

    var ShoppingApp = React.createClass({ 
     handleUserInput: function(fiterText) 
     { 
      this.setState({ 
       filterText: fiterText 
      }); 
     }, 
     getInitialState: function() 
     { 
      return{ 
       filterText: '' 
      }; 
     }, 
     render: function() 
     { 
      return(  
       <span> 
        <SearchProductsBar filterText={this.state.filterText} onUserInput={this.handleUserInput}/> 
        <ProductsTable filterText={this.state.filterText} productList={this.props.products}/> 
       </span> 
      ); 
     } 
    }); 

    React.renderComponent(<ShoppingApp products={shoppingItemsObject.items} />, document.getElementById('myItemList')); 
</script> 
<title>Shopping Cart App</title> 
</head> 
<body> 
    <div id="myShoppingCartHomePage" data-role="page"> 
     <div data-role="header" style="text-align:center;">MyShopping App</div> 
     <div data-role="content"> 
      <input type="button" value="Add To Cart" /> 
      <div id="myItemList"> 

      </div> 
     </div> 
     <div data-role="footer" style="text-align:center;">Shopping Cart</div> 
    </div> 

    <div id="myShoppingCartHomePage2" data-role="page"> 
     This it the second page 
    </div> 
</body> 
</html> 

enter image description here

有沒有辦法使用JS作出反應呈現jQuery Mobile的組件?

感謝, ANKIT塔納

回答

2

看那類名jQuery Mobile的使用。你需要去他們的演示,並檢查元素。

jquery mobile inspect element on popup container

從那裏,你可以複製這些類(如UI的彈出容器),以及額外的狀態類(在例如,彈出,用戶界面,彈出激活)內的反應,或任何其他UI庫,而不jQuery或jQuery Mobile JavaScript。

在按鈕的情況下,我相信這只是<button className="ui-btn">


或者,你可以嘗試只是componentDidMount使用jQuery(this.getDOMNode()).somejQueryMobileFunction()。如果函數移動元素,刪除它們等,這將不起作用。如果它只是改變樣式和類,它應該沒問題,但在某些邊緣情況下可能會與您的代碼發生衝突。

+0

嘿,這個工程。但是,它不會導入對知道jQM組件的類名的依賴。我知道它在文檔中可用。 – 2014-09-24 10:54:34

+0

非常感謝這個解決方案:) – 2014-09-24 10:55:20