una pasar pagina otra manejo leer funcion example ejecutar datos contenido cargar carga bootstrap asincrona archivos archivo antes javascript iphone json titanium tableview

pasar - manejo de archivos en javascript



No se puede ver el Tableviewrow mientras se hace clic en TableViewSection en la aplicación móvil de titanio (1)

He desarrollado una aplicación basada en la siguiente estructura de árbol:

Defecto :

  • Categoría
  • Categoría
  • Categoría

Al hacer clic en la categoría:

  • Categoría
    • Subcategoría
      • Producto
  • Categoría

  • Categoría

Algunas veces:

  • Categoría

  • Categoría

    • Producto
  • Categoría

Aquí tengo que implementar este concepto utilizando la vista de tabla.

Sí, he creado la vista de tabla y luego he creado la sección tableviews. He agregado las categorías en la tablaviewsection.i he creado la vista de tabla dentro de la tableviewsection. Si he hecho clic en la categoría seleccionada, he agregado los valores de subcategoría en estos tableviewrow. Pero algunas categorías que tienen la subcategoría ... algunas de las categorías no tienen la subcategoría. Estrictamente tener los productos. Entonces, ¿pueden explicarme?

EDITAR:

Tengo el siguiente código:

// create menu view var data = []; var v1 = Ti.UI.createView({ height: ''100%'', width: ''320dp'', left: ''0%'', backgroundColor: ''#212429'' }); $.drawermenu.drawermenuview.add(v1); var tableView = Ti.UI.createTableView({ height: ''100%'', width: ''100%'', separatorColor: ''#111214'', allowsSelection: true, style: Ti.UI.iPhone.TableViewStyle.GROUPED }); v1.add(tableView); var dataArray = []; getCategoryList(); function getCategoryList() { 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/xxx.php?action=allCategory&category=all''); sendit.send(); sendit.onload = function() { var response = JSON.parse(this.responseText); if (response[0].success == 0) { tableView.headerTitle = response[0].message; } else { tableView.headerTitle = ""; dataArray = []; for (var i = 0; i < response[0].data.length; i++) { var customsection = Ti.UI.createView({ width: Ti.UI.FILL, height: Ti.UI.SIZE, opened: true, id: i, categorylist_category_id: response[0].data[i].categoryid, categorylist_level: response[0].data[i].category_level, backgroundcolor: ''#fff'', length: response[0].data.length, }); var text = Ti.UI.createLabel({ text: response[0].data[i].category, left: 20, id: i, categorylist_category_id: response[0].data[i].categoryid, categorylist_level: response[0].data[i].category_level, color: ''#000'' }); customsection.add(text); row = Ti.UI.createTableViewSection({ headerView: customsection, }); dataArray.push(row); customsection.addEventListener(''click'', function(e) { categorylist_category_id = e.source.categorylist_category_id; categorylist_level = e.source.categorylist_level; categorylist_id = e.source.id; if (categorylist_level == "Y") { var subcategory = []; for (j = 0; j < response[0].data[categorylist_id].subcategorymm.length; j++) { var subcategory = Ti.UI.createTableViewRow({ subcategorylist_category_id: response[0].data[categorylist_id].subcategorymm[j].categoryid, layout: ''horizontal'', top: 5, width: "100%", backgroundcolor: ''#000'', height: Ti.UI.SIZE, }); var subcategorytext = Ti.UI.createLabel({ text: response[0].data[categorylist_id].subcategorymm[j].category, top: 5, width: Ti.UI.FILL, font: { fontSize: ''18dp'' }, color: ''#040404'', wordWrap: true, height: Ti.UI.SIZE, ellipsize: true }); subcategory.add(subcategorytext); }; row.add(subcategory); } else { from = "Product"; var product = Alloy.createController(''product'').getView(); product.open(); } }); }; tableView.setData(dataArray); }; }; } var top10Screen = Alloy.createController(''top10Screen'').getView(); $.drawermenu.drawermainview.add(top10Screen); Ti.App.addEventListener(''settingImg'', function(data) { $.drawermenu.showhidemenu(); }); $.sample.open();

EDITAR:

Aquí se da el código de aleación:

sample.xml:

<Alloy> <Window class="container"> <Require type="widget" src="com.drawermenu.widget" id="drawermenu"/> </Window> </Alloy>

Tengo que abrir las categorías en el menú deslizante. Así que tengo que usar estos widgets. Si hago clic en las categorías del menú del control deslizante, debo mostrar la subcategoría en el menú del control deslizante. Este es exactamente mi alcance.

este es exactamente mi json:

[ { "message": "Category list found", "data": [ { "categoryid": "335", "parentid": "0", "category": "New In", "description": "", "meta_description": "", "avail": "Y", "order_by": "0", "product_count": "2", "top_product_count": "1", "meta_keywords": "", "override_child_meta": "N", "title_tag": "", "lpos": "1", "rpos": "4", "category_level": "Y", "new_category_images": "https://dev101.example.com/xxx/images/C/newin.png", "subcategorymm": [ { "categoryid": "344", "parentid": "335", "category": "subcategory-newin", "description": "", "meta_description": "", "avail": "Y", "order_by": "0", "product_count": "1", "top_product_count": "1", "meta_keywords": "", "override_child_meta": "N", "title_tag": "", "lpos": "2", "rpos": "3", "category_level": "N" } ] }, { "categoryid": "336", "parentid": "0", "category": "Women''s", "description": "", "meta_description": "", "avail": "Y", "order_by": "1", "product_count": "2", "top_product_count": "2", "meta_keywords": "", "override_child_meta": "N", "title_tag": "", "lpos": "5", "rpos": "6", "category_level": "N", "new_category_images": "https://dev101.example.com/xxx/images/C/women.png" } ], "success": "1" } ]

Aquí se enumeran las categorías. Pero si hago clic en la categoría, aparecerá la subcategoría. Pero no puedo ver la subcategoría. ¿Puedes consultar con esto y darme una solución?

EDITAR:

en este bucle for:

for(j=0;j<response[0].data[categorylist_id].subcategorymm.length;j++){

Tengo imprimir los valores como:

Ti.API.info(response[0].data[categorylist_id].subcategorymm[j].category);

esto significa que las subcategorías se imprimen bien en la ventana de mi consola. Pero no puedo ver la vista de tabla. Sé que cometí un pequeño error. Así que, ¿puedes descubrir el error y darme una solución?


Tu problema es real y tu código parece un poco desordenado. Te recomiendo que vayas por algo más estructurado si quieres evitar gastar HORAS para obtener el resultado deseado. Por ejemplo, intente dividir su código actual en múltiples funciones con un objetivo preciso.

Trataré de ayudar, usando algunos códigos que utilicé para mi menú de navegación de 2 niveles. La lógica es la misma, pero tendrás que agregar una tercera capa.

Menú de construcción

Supongo que en su xml, tiene un evento de escucha de TableView vacío para tocar (o hacer clic ) como este:
<TableView id="menuTable" onSingletap="onTap" />

Durante la inicialización, puede llamar a una función que agregará secciones vacías de primer nivel a su TableView.

Para agregar nuevas filas a estas secciones, defina _createRow que crea, completa y devuelve un Ti.UI.createTableViewRow dependiendo de su type :

_createRow = function(data, type) { var row = Ti.UI.createTableViewRow(); // populate row with some content here... // Save some useful info in the row row.listId = data.id; row.subItems = data.subItems; // What type of row are we creating ? if (type === ''node'') { // Category row.isParent = true; } if (type === ''child'') { // Customise row as a Product row.backgroundColor = ''#2a2a2a''; } // There could be a third type for Sub-Category return row; };

Luego, dentro de cada sección que agrega una fila de node , esta fila es una matriz que muestra la Categoría y guarda información como su identificación de categoría , su tipo y sus subelementos (usaremos esto más adelante).

Manejar clic evento (parte 1)

Si obtiene un evento de TableView, hay 3 casos posibles:

  1. Usuario pulsado Categoría -> mostrar / ocultar subcategoría
  2. Usuario hizo clic en Subcategoría -> mostrar / ocultar producto
  3. Usuario pulsado Producto -> Navegar a Producto

El código relacionado se encuentra al final de esta publicación, ya que primero explicaré cómo manejar estos casos.

Sección ''Abrir'' de la categoría

Si la Sección no se ha abierto ya, queremos mostrar lo que hay dentro. Definamos una función _openSection que agregará una nueva sección justo después de la categoría en la que se hizo clic. Luego, agregue a esta Sección tantos elementos como subcategorías que tenga.

function _openSection(index, parentRow) { newSection = Ti.UI.createTableViewSection({ index: parentRow.section.index + 1 }); _.each(parentRow.subItems, function(item) { newSection.add(_createRow(item, ''child'')); }); parentRow.opened = true; // Could be animated on iOS: $.menuTable.insertSectionAfter(index, newSection); // Save which Section is currently open currentOpen = newSection; };

''Cerrar'' sección de categoría

Lo mismo ocurre al revés: una sección ya abierta puede cerrarse grabándola. Simplemente eliminemos la sección seleccionada de TableView .

_closeSection = function(index, parentRow) { currentOpen = null; parentRow.opened = false; var removed = $.menuTable.sections[index].rows.length; $.menuTable.deleteSection(index); return removed; };

Manejar evento click (parte 2)

Ahora tienes todo lo que necesitas para abrir y cerrar una categoría, aquí está el código para manejarlo:

_handleMenu = function(evt) { var justify = false, openIndex; // Clicked Section is already open if (evt.row.opened) { return _closeSection(evt.section.index + 1, evt.row); } else { /* Close currently opened Section, to have only one Category * opened at the same time (simplifies the solution a lot) */ if (currentOpen) { parentSection = $.menuTable.sections[currentOpen.index - 1]; parentRow = parentSection.rows[0]; if (currentOpen.index <= evt.section.index) { justify = true; } removed = _closeSection(parentSection.index + 1, parentRow); } // Set the index we''ll be working with: openIndex = evt.index; // A Section was closed, change the index: if (justify) { openIndex -= removed; } // Workaround for parity on Android if (OS_ANDROID) { evt.row.section = evt.section; } return _openSection(openIndex, evt.row); } };

Intente que este código funcione con 2 capas, luego implemente la tercera capa faltante para alcanzar su objetivo.
No dudes en hacer preguntas si no estaba lo suficientemente claro;)
¡Buena suerte!