0

Kendo Mobile Listview を使用して json ファイルの内容を表示しています。最初の検索はうまく機能します。クリックイベントで、そのリストアイテムにバインドされたデータアイテムを表示できます。ただし、2 回目の検索の後、データ項目は未定義になります。これを回避する方法はいくつか考えられますが、現在の方法が機能しない理由はありません。リストビューにデータソースを2回定義してはならないからですか? どんな洞察も高く評価されます。ありがとうございました。HTML

<span id="search">
                <input id="inputSearch" type="text" placeholder="Search" class="k-textbox"/>
                <a id="btnSearch" class="k-button" type="submit"><span class="k-icon k-i-search" >...</span></a>
            </span>

  • 検索を絞り込んでください
  • js スニペットは次のとおりです。

     $.ajax({
                           cache:false,
                           type:"GET",
                           dataType: "json",
                           url: "http://"+host+"/Api"+requestController+queryString,
                           headers: {"AuthToken":cookie},
                           success:
                               function (data) {
                                   var val = data.data;                                       
                                        if(val.length!=0) {
                                            $("#customerList").data
                                            var customerDataSource = new kendo.data.DataSource({ data: val });
                                            customerDataSource.read();
                                            $("#customerList").kendoMobileListView({
                                                dataSource: customerDataSource,
                                                template: '<a>${Company}<span class="k-status-text"> <br />${CustNo}</span></a>',
                                                dataType:"json",
                                                style: "inset",
                                                click: function(e){    
    //!!!! EXCEPTION OCCURS HERE ON SECOND SEARCH. DATAITEM UNDEFINED                                                
                                                    alert(e.dataItem.CustNo);
                                                    // redirect to
                                                    app.navigate("#overview-customer");
    
                                                }
                                            });
                                        } else {
                                            $("#customerList").append('<li>' +'<div class="k-block k-info-colored">'+
                                                'Please refine your search'+'</div>' + '</li>');
                                        }
    
                               }
                        });
    
    4

    2 に答える 2

    0

    検索するたびにリストビューを再作成しています

    $("#customerList").kendoMobileListView({
    

    これは、特にモバイル デバイスにとっては負担の大きい操作です。モバイルリストビューを一度初期化 (作成) し、dataSource.data()メソッドを使用して、使用するデータを変更することをお勧めします。これにより、経験したような問題が発生しないことも保証されます。

    于 2013-02-25T17:52:00.737 に答える
    0

    Petur の回答によると、リスト ビューはそのようにバインドする必要があります。クリックごとにリストビューをインスタンス化するのは負担が大きく、Kendo のスクリプトと互換性がありませんでした。

     var customerDataSource = new kendo.data.DataSource({ });
        // Mobile listview
         $("#customerList").kendoMobileListView({
                                                dataSource: customerDataSource,
                                                template: '<a>${Company}<span class="k-status-text"> <br />${CustNo}</span></a>',
                                                dataType:"json",
                                                style: "inset",
                                                click: function(e){
                                                    var index = $(e.item).index();
                                                    var text= $(e.item).index();
                                                    alert(e.dataItem.CustNo);
                                                    // redirect to
                                                    app.navigate("#overview-customer");
    
    
                                                },
                                                dataBound: function(e){
                                                    alert("Ive been bound");
                                                }
                                            });
    
          $('#search a').click(function () {
              var searchstr = $('#search input').val();
              var requestController = "/Customers";
              var queryString= "?filtercriteria=custno-"+searchstr+"&company-"+searchstr;
                        $.ajax({
                           cache:false,
                           type:"GET",
                           dataType: "json",
                           url: "http://"+host+"/Api"+requestController+queryString,
                           headers: {"AuthToken":cookie},
                           success:
                               function (data) {
                                   var val = data.data;
                                        if(val.length!=0) {
                                            var ds = [{ data: val }];
                                            customerDataSource.data(val);
    
                                        } else {
                                            $("#customerList").append('<li>' +'<div class="k-block k-info-colored">'+
                                                'Please refine your search'+'</div>' + '</li>');
                                        }
    
                               }
                        });
                });
    
    于 2013-02-26T16:41:36.737 に答える