2013-02-25 129 views
0

我正在使用Kendo Mobile Listview来显示json文件的内容。第一个搜索很好,在点击事件中,我可以查看绑定到该列表项的数据项。但是,在第二次搜索之后,数据项变得未定义。有很多方法可以解决这个问题,但是目前的方法没有理由不能工作。是否因为listview不应该再次定义它的数据源?任何见解都会被赞赏。谢谢。 HTMLKendo UI Mobile Listview dataitem undefined on second search

<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>'); 
                } 
    
              } 
            }); 
    

    回答

    0

    你每次都重新创建的列表视图您搜索

    这是一项特别针对移动设备的卓越操作。更好地初始化(创建)移动列表视图一次,并使用方法更改其使用的数据。这也将确保你不会遇到像你所遇到的问题。

    +0

    我同意。我一直在搞这个。我会给这个方法一个镜头,让你知道。感谢您的快速回复。 – Strake 2013-02-25 17:57:18

    +0

    完美工作。谢谢你澄清。 – Strake 2013-02-25 18:27:24

    +0

    我会更新这个帖子,修改后的绑定让他人参考,一旦它允许我解锁。 – Strake 2013-02-25 18:31:36

    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>'); 
                } 
    
              } 
            }); 
          });