получить идентификатор элемента списка, по которому щелкнули, отфильтрованного с помощью dojox.mobile.searchbox

Я разрабатываю мобильное приложение, которое показывает элемент списка для каждого клиента. Этот список можно отфильтровать с помощью компонента dojox.mobile.searchbox. По этой ссылке я нашел пример (http://download.dojotoolkit.org/release-1.8.3/dojo-release-1.8.3/dojox/mobile/tests/test_SearchBox-demo.html) для этого поведения но упустите возможность узнать, какой элемент нажат. Мне нужна эта функциональность для создания нового представления с некоторыми сведениями о клиенте.

Мой проект устанавливает две основные функции в функции dojoInit:

require([
            "dojox/mobile/parser",
            "dojox/mobile",
            "dojox/mobile/compat",
            "dojox/mobile/SearchBox",
            "dojo/ready",
            "dijit/registry",
            "dojo/data/ItemFileReadStore",
            "dojo/store/DataStore",
            "dojox/mobile/ScrollableView",
            "dojox/mobile/EdgeToEdgeDataList",
            "dojox/mobile/SimpleDialog",
            "dojox/mobile/RoundRect",
            "dojox/mobile/Button",
            "dojox/mobile/RadioButton",
            "dojox/mobile/Switch"
            ], function(parser, mobile, compat, SearchBox, ready, registry, 
                        ItemFileReadStore, DataStore, ScrollableView, 
                        EdgeToEdgeDataList, RoundRect, Button, RadioButton, Switch){



            onSearch = function(results, query, options){
                // Callback when a search completes.
                WL.Logger.debug("results: " + results);
                WL.Logger.debug("query: " + query);
                list.setQuery(query);
            };

            ready(function(){
                searchBox = registry.byId("searchBox");
                searchBox.queryExpr = "*${0}*";
                list = registry.byId("list");
            });
        });

но хранилище данных устанавливается только в том случае, если функциональность запрашивается из меню, вызывая функцию:

function listCustomers(){

WL.Logger.debug("entrata in listCustomers()");

require([
            "dojox/mobile/parser",
            "dojox/mobile",
            "dojox/mobile/compat",
            "dojox/mobile/SearchBox",
            "dojo/ready",
            "dijit/registry",
            "dojo/data/ItemFileReadStore",
            "dojo/store/DataStore",
            "dojox/mobile/ScrollableView",
            "dojox/mobile/EdgeToEdgeDataList",
            "dojox/mobile/SimpleDialog",
            "dojox/mobile/RoundRect",
            "dojox/mobile/Button",
            "dojox/mobile/RadioButton",
            "dojox/mobile/Switch"
            ], function(parser, mobile, compat, SearchBox, ready, registry, 
                        ItemFileReadStore, DataStore, ScrollableView, 
                        EdgeToEdgeDataList, RoundRect, Button, RadioButton, Switch){



var static_data = { 
        items: [ 
            {label: "Alabama", moveTo: "testView", id: "Alabama"},
            {label: "Alaska"},
            {label: "American Samoa"},
            {label: "Arizona"},
            {label: "Arkansas"},
            {label: "Armed Forces Europe"},
            {label: "Armed Forces Pacific"},
            {label: "Armed Forces the Americas"},
            {label: "California"},
            {label: "Colorado"},
            {label: "Connecticut"},
            {label: "Delaware"},
            {label: "District of Columbia"},
            {label: "Federated States of Micronesia"},
            {label: "Florida"},
            {label: "Georgia"},
            {label: "Guam"},
            {label: "Hawaii"},
            {label: "Idaho"},
            {label: "Illinois"},
            {label: "Indiana"},
            {label: "Iowa"},
            {label: "Kansas"},
            {label: "Kentucky"},
            {label: "Louisiana"},
            {label: "Maine"},
            {label: "Marshall Islands"},
            {label: "Maryland"},
            {label: "Massachusetts"},
            {label: "Michigan"},
            {label: "Minnesota"},
            {label: "Mississippi"},
            {label: "Missouri"},
            {label: "Montana"},
            {label: "Nebraska"},
            {label: "Nevada"},
            {label: "New Hampshire"},
            {label: "New Jersey"},
            {label: "New Mexico"},
            {label: "New York"},
            {label: "North Carolina"},
            {label: "North Dakota"},
            {label: "Northern Mariana Islands"},
            {label: "Ohio"},
            {label: "Oklahoma"},
            {label: "Oregon"},
            {label: "Pennsylvania"},
            {label: "Puerto Rico"},
            {label: "Rhode Island"},
            {label: "South Carolina"},
            {label: "South Dakota"},
            {label: "Tennessee"},
            {label: "Texas"},
            {label: "Utah"},
            {label: "Vermont"},
            {label: "Virgin Islands, U.S."},
            {label: "Virginia"},
            {label: "Washington"},
            {label: "West Virginia"},
            {label: "Wisconsin"},
            {label: "Wyoming"},
        ]
    };

    // dojo.data store for dojox.mobile.EdgeToEdgeDataList
    dataStore = new ItemFileReadStore({data: static_data});
    // dojo.store for dojox.mobile.SearchBox
    store = new DataStore({store: dataStore});

    searchBox = null;
    list = null;

    list = dijit.registry.byId("list");

    searchBox = dijit.registry.byId("searchBox");
    searchBox.set("store", store);

    list.setStore(dataStore, {label: "*"});


});
}

Я использую статические данные для начальных тестов. HTML-скрипт следующий:

<input data-dojo-type="dojox.mobile.SearchBox" type="search" id="searchBox"
                style="width:100%" placeHolder="Search" 
                data-dojo-props='store:store, searchAttr: "label", ignoreCase: true, incremental: true, pageSize:1, onSearch:onSearch, queryExpr: "*${0}*"'>

            <div data-dojo-type="dojox.mobile.ScrollableView">
                <ul data-dojo-type="dojox.mobile.EdgeToEdgeDataList" 
                id="list"></ul>
            </div>

Есть ли способ получить, какой элемент был выбран для построения следующего представления? как событие "onclick"...

Спасибо

Энрико


person enrico.visentini    schedule 02.04.2013    source источник


Ответы (2)


Я использую это в файле js:

mydata+="{ 'label': '"+codice_catalogo[i].CODCT+"', 'moveTo':'#', 'onClick':function(){  Nextview('"+codice_catalogo[i].CODCT+"')}   }, ";

function Nextview(){
var w =  dijit.registry.byId('view_dove_sei_posizionato');
w.performTransition('view_dove_vuoi_andare',1,"slide",null);
}
person Angelo    schedule 16.07.2013

Что вы можете сделать, так это установить userClickAction для каждого элемента, и в этом обработчике вы можете где-нибудь записать выбранный элемент. Поскольку вы используете DataList, вы должны переопределить функцию createListItem списка, чтобы установить userClickAction.

Надеюсь, это поможет.

Eric
person edurocher    schedule 03.04.2013
comment
Спасибо, Эрик. У вас есть пример реализации этого метода? - person enrico.visentini; 19.04.2013