2015-05-04 9 views
8

Ho sviluppato l'applicazione GridView utilizzando il widget di (da questo codice)Come possiamo implementare la funzionalità Onclick nella griglia titanio elemento Mostra

https://github.com/pablorr18/TiDynamicGrid

Ho modificato il codice secondo le mie esigenze del cliente. Ora, se mi piace fare clic sul pulsante Visualizza carrello sulla voce di elenco, si avviserà il messaggio come "Sono cliccato". Ma ho provato in vari modi. Ma non riesco a trovare le soluzioni. Qualcuno può spiegarmi come stiamo scrivendo il codice per questo.

ho segue sottostante Codice nella mia domanda:

var items = []; 
var showGridItemInfo = function(e){ 
    alert("Onclick the row"); 
}; 

var delay = (OS_ANDROID) ? 1000:500; 

$.tdg.init({ 
    columns:3, 
    space:5, 
    delayTime:delay, 
    gridBackgroundColor:'#e1e1e1', 
    itemBackgroundColor:'#fff', 
    itemBorderColor:'transparent', 
    itemBorderWidth:0, 
    itemBorderRadius:5, 
    onItemClick: showGridItemInfo 
}); 

function createSampleData(){ 
    var sendit = Ti.Network.createHTTPClient({ 
     onerror: function(e){ 
      Ti.API.debug(e.error); 
      alert('There was an error during the connection'); 
     }, 
     timeout:10000, 
    });   
    sendit.open('GET', url+'android_livedev/client/test.php?action=listitems&categoryid='+subcategorylist_category_id+'&productmin=0&productmax=50'); 

    sendit.send(); 
    sendit.onload = function(){ 
     var response = JSON.parse(this.responseText); 
     if(response[0].success == 0){ 
      alert("No Products Found"); 
     } 
     else { 
      items = []; 
      for (var x=0;x<response[0].data.length;x++){ 
       var view = Alloy.createController('item_layout',{ 
        image:imageurl+response[0].data[x].thumb_image, 
        product:response[0].data[x].product, 
        productprice:"$"+" "+response[0].data[x].price, 
        onItemClick: addcart, 
       }).getView(); 
       var values = { 
        product: response[0].data[x].product, 
        image: response[0].data[x].thumb_image, 
        productid : response[0].data[x].productid, 
       }; 
       items.push({ 
        view: view, 
        data: values 
       }); 
      }; 
      $.tdg.addGridItems(items); 
      reateSampleData(); 

      $.tdg.clearGrid(); 
      $.tdg.init({ 
       columns:nColumn, 
       space:nSpace, 
       delayTime:delay, 
       gridBackgroundColor:'#e1e1e1', 
       itemHeightDelta: 0, 
       itemBackgroundColor:'#fff', 
       itemBorderColor:'transparent', 
       itemBorderWidth:0, 
       itemBorderRadius:5, 
       onItemClick: showGridItemInfo 
      }); 
      createSampleData(); 

     }); 

     $.win.open(); 

Il codice item_layout.xml sta cercando come:

<Alloy> 
    <View id="mainView"> 
     <ImageView id="thumb"/> 
     <Label id="product"></Label> 
     <Label id="productprice"></Label> 
     <Button id="addcart" onClick="additemtocart"/> 
    </View> 
</Alloy> 

EDIT:

ora sto ottenendo la vista e l'ID del pulsante da quella vista specificata. Ma se sto cercando di fare clic sul pulsante significa che non è in grado di fare. puoi controllare il mio codice e dare una soluzione.

ho aggiunto il codice qui sotto:

var view = Alloy.createController('item_layout',{ 
     image:imageurl+response[0].data[x].thumb_image, 
     product:response[0].data[x].product, 
     productprice:"$"+" "+response[0].data[x].price 
    }).getView(); 
    var controller = Alloy.createController('item_layout'); 
    var button = controller.getView('addcart'); 
    button.addEventListener('click', function (e){ 
    alert("click"); 
    Ti.API.info('click'); 
    }); 
+0

Fornire un [esempio minimo, completo e verificabile] (http://stackoverflow.com/help/mcve). Il codice sopra riportato è incompleto e non verificabile. –

risposta

1

commutare prima ids a classi perché sono non univoco. Usa ID solo se devi. In secondo luogo, provare qualcosa di simile:

provare qualcosa di simile:

$('.addCart').click(function() { 
    var item = $(this).silblings('.product').text; 
    addItemToCart(item); 
}); 

Ancora meglio, aggiungere un attributo data-productId al pulsante carrello della spesa e si potrebbe fare qualcosa di simile:

$('.addCart').click(function() { 
    var itemId = $(this).attr('data-productId'); 
    addItemToCart(itemId); 
}); 

Questo è meglio perché stai solo richiedendo che il pulsante del carrello acquisti sia sullo schermo.

Tutto ciò detto, è anche probabilmente necessario includere un fallback che aggiunge l'elemento al carrello quando javascript non è disponibile sulla pagina.

+0

ho provato la tua risposta ... ma non riesco a ottenere la soluzione. Ora ho provato qualcosa e ottenere il pulsante ID. Ho aggiornato la mia domanda. Per favore, controlla la mia domanda e dammi una soluzione. –

+0

@KrishnaVeni, stai mescolando il modo jQuery di fare le cose e il modo javascript di fare le cose. Se utilizzi jQuery, ti consigliamo di provare a utilizzare solo i metodi jQuery per motivi di leggibilità (tieni tutto nella stessa API). Come tale, usa $ ('. AddCart'). On ('click', function() {alert ('click');}); '. È necessario il metodo 'on' quando si fa riferimento a elementi creati dinamicamente. – charles