Nano Hash - криптовалюты, майнинг, программирование

Прокручиваемый указатель вида Titanium

Мой проект состоит в том, чтобы перечислить продукты с представлениями, а затем, когда я нажимаю на продукт, мне нужно перейти на другую страницу и повторно перечислить продукты с помощью прокручиваемого просмотра и настроить таргетинг на просмотр, который будет отображаться первым (извините за плохой английский):

Допустим, это мой список (взято из коллекции):

<Alloy>
<Window id="products" onClose="cleanup" title="All products" class="container" >
    <ScrollView dataCollection="list_products" dataTransform="parse_liste" layout='vertical' id="results" class="resultats">
        <View product_id="{ID}" 
            product_photo="{photo}" 
            product_name="{product_name}" lauyout='horizontal' class='heightAuto' width='Ti.UI.FILL' backgroundColor='#eee' bottom='1'>
            <ImageView touchEnabled="false" left='10' image='{photo}' />
            <View touchEnabled="false" layout='vertical' height='Ti.UI.SIZE'>
                <Label touchEnabled="false" left='100' class='nom' text='{product_name}' />
                <Label touchEnabled="false" left='100' class='nom' text='{product_price} €/h' />
            </View>
        </View>
    </ScrollView>
    <ActivityIndicator color="white" id="activityIndicator" message="Chargement des candidats ..."/>
</Window>

When click on product (the controller) :

var products = Alloy.Collections.liste_recherche;
$.activityIndicator.show();
products.fetch({
    success:function(model,results){
        Alloy.Globals.results = results;
        $.activityIndicator.hide();
    }
});

//// CLICK ON A PRODUCT
$.list_products.addEventListener('click', function(e){
    if( Alloy.Globals.results ){
        ///////// GO TO PRODUCT PAGE AND PASS ARGS
        var xpng = require('xpng');
        xpng.openWin(Alloy.CFG.nav, 'product', Alloy.Globals.products);
    } 
});

Страница продукта:

var args = $.args;

function getProfil(){
    var products_array = [];    
    var c = ['gray','green','blue','red'];
   _.each(args, function(item, key, value){

        /* Créer la vue */
        var product_container = Ti.UI.createView({
            id:item.ID,
            layout:'vertical',
            backgroundColor:c[Math.floor(Math.random() * c.length)]
       });

        var product_image = Ti.UI.createImageView({ image : item.photo});
        var product_name = Ti.UI.createLabel({
        text: item.champs_candidat.nom
    });

    product_container.add(product_image);
    product_container.add(product_name);
    products_array.push(product_container);     
});

    var style = $.createStyle({
        classes: ['listeProfiles'],
        apiName: 'ScrollableView'
    });
    var product_scroller = Ti.UI.createScrollableView({
        className: 'listeProfiles',
        views : products_array,
        showPagingControl:true
   });
   product_scroller.applyProperties(style);
   $.product_win.add(product_scroller);
}

Эти коды работают нормально, просто я хочу сначала отобразить просмотр по клику (со страницы A).

Спасибо за помощь.


Ответы:


1

Я думаю, вам нужно зафиксировать, какое представление было нажато в событии ScrollView click:

$.list_products.addEventListener('click', function(e){
// e.source will give you the clicked view and will behave like $.VIEW_ID
// so you can access any property or method of the clicked view using e.source here

Ti.API.info("Clicked View ID = " + e.source.product_id);   

    if( Alloy.Globals.results ){
        ///////// GO TO PRODUCT PAGE AND PASS ARGS
        var xpng = require('xpng');
        xpng.openWin(Alloy.CFG.nav, 'product', Alloy.Globals.products);
    } 
});

В соответствии с вашим кодом вы уже отключили касания дочерних представлений представления с помощью этого свойства product_id, поэтому приведенный выше модифицированный код события клика сможет предоставить вам правильный идентификатор продукта нажатого View внутри ScrollView.

Сейчас:

  1. Вы нажали на product_id представления.
  2. Напишите код для данных вашей коллекции, чтобы узнать индекс этого product_id.
  3. Используйте индекс из шага 2, чтобы установить это свойство currentPage для ScrollableView

Вот краткое изложение общего процесса:

  1. Получите product_id представления, на которое нажали, с помощью e.source
  2. Используйте этот product_id, чтобы узнать его индекс при сборе данных.
  3. Наконец, index из шага 2 будет значением свойства currentPage ScrollableView. (Вы сами выбираете, как передать этот индекс на страницу продукта.)
11.07.2016
  • Привет, Прашант Саини, спасибо за помощь, я могу получить product_id, мне просто интересно, как теперь получить индекс из сбора данных? я пробовал: var index = _.findIndex(Alloy.Globals.results, {'product_id': e.source.product_id}); но мне выдает ошибку 11.07.2016
  • Привет, я проверил, и это сработало, спасибо за вашу помощь. 11.07.2016
  • Отлично, ты решил это. К сожалению, я не смог написать код для получения индекса из коллекции, так как вы не разместили схему коллекции. Но я знал, что вы сможете решить это с помощью моих шагов, и это поможет вам лучше понять ситуацию, чем получить полный ответ (хотя StackOverFlow означает точные ответы .. хе-хе). 11.07.2016
  • Я только что сделал цикл for из Alloy.Globals.products, чтобы получить индекс (легко), но мне любопытно узнать, как получить его из коллекции. Для схемы коллекции я создал ее из оставшейся библиотеки github.com/jasonkneen/RESTe. 11.07.2016
  • Есть и другие способы сделать это без индекса, потому что индекс полезен только тогда, когда у вас есть упорядоченные списки, поскольку индекс зависит от порядка.. например. если у вас есть элементы A, B, C, D в порядке 1, 2, 3, 4 .... тогда вы можете воспользоваться индексом, ..... но если у вас есть A, B, C, D в порядке например 3, 1, 4, 2, тогда вам нужно будет сохранить дополнительный ключ-значение, который вы можете использовать для сравнения... Подумайте о них и попробуйте (это улучшит вашу логику)... Удачи!! ! 13.07.2016
  • Вы правы, возможно, использование пользовательского атрибута является решением 14.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..