2013-10-23 2 views
0

디자이너로서 나는 움직일 데이터가 없을 때 아름다운 "빈 상태"메시지라는 개념을 아주 좋아합니다. 사용자가 조치를 취하도록 권장합니다. (사실, 이것에 전담하는 전체 tumblr 블로그가 있습니다 : http://emptystat.es/)Flexigrid를 사용하여 매력적인 "빈 상태"메시지를 표시하는 방법이 있습니까?

Flexigrid의 행복하고 헌신적 인 사용자로서, 저는 시스템을 구축 할 때 빈 상태 메시지를 대신 할 수 있기를 바랍니다. 그리드에 표시 할 검색 결과가 없습니다 (예 : "보류중인 요청이 없습니다! 시작하려면 새로 만들기를 클릭하십시오."). 이상적으로, 그러한 빈 상태 메시지는 그래픽이고 개별 행보다 커서 그리드의 전체 내용을 대체합니다. 아무도 반환 된 행이 없을 때 flexigrid의 내용을 그래픽 빈 상태 메시지로 대체하는 방법에 대해 조언을 해 줄 수 있습니까?

감사합니다.

답변

0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Flexigrid</title> 
    <link rel="stylesheet" type="text/css" href="../css/flexigrid.css"> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    <script type="text/javascript" src="../js/flexigrid.js"></script> 
    </head> 
    <body> 
    <p>This is a sample implementation attached to a form, to add additional parameters.</p> 

    <form id="sform"> 
     <p> 
     The values you entered will be place in name column for demo's sake.<br /> 
     Value 1 : <input type="text" name="val1" value="" autocomplete="off" /><br /> 
     Value 2 : Is a hidden input with value 3<input type="hidden" name="val2" value="3" /><br /> 
     Value 3 : 
     <select name="val3"> 
      <option value="1">One</option> 
       <option value="2">Two</option> 
       <option value="3">Three</option> 
       <option value="4">Four</option> 
       <option value="5">Five</option> 
     </select><br /> 
     Value 4 : <input type="checkbox" name="val4" id="val4" value="4" /><label for="val4">This will pass a value 4 if checked</label> 
     </p> 
     <p> 
      <input type="submit" value="Submit" /> 
     </p> 
    </form> 
    <button onclick=hide()>HIDE</button> 
    <button onclick=show()>SHOW</button> 
    <table id="empty1" style="display:none"> 
    <tr><td><b>Please</b> <u>fill some</u> data</td></tr> 
    </table> 
    <table id="flex1" style="display:block"> 
    <tr><td>1</td></tr> 
    <tr><td>2</td></tr> 
    <tr><td>3</td></tr> 
    </table> 
    <script type="text/javascript"> 
    var old = undefined 
    function hide() { 
     if (old == undefined) { 
      old = flex1.innerHTML 
      flex1.innerHTML = empty1.innerHTML 
     } 
    } 
    function show() { 
     if (old != undefined) { 
      flex1.innerHTML = old 
      old = undefined 
     } 
    } 
    $("#flex1").flexigrid({ 
     url: 'post2.php', 
     dataType: 'json', 
     colModel : [ 
      {display: 'ISO', name : 'iso', width : 40, sortable : true, align: 'center'}, 
      {display: 'Name', name : 'name', width : 180, sortable : true, align: 'left'}, 
      {display: 'Printable Name', name : 'printable_name', width : 120, sortable : true, align: 'left'}, 
      {display: 'ISO3', name : 'iso3', width : 130, sortable : true, align: 'left', hide: true}, 
      {display: 'Number Code', name : 'numcode', width : 80, sortable : true, align: 'right'} 
      ], 
     searchitems : [ 
      {display: 'ISO', name : 'iso'}, 
      {display: 'Name', name : 'name', isdefault: true} 
      ], 
     sortname: "iso", 
     sortorder: "asc", 
     usepager: true, 
     title: 'Countries', 
     useRp: true, 
     rp: 15, 
     showTableToggleBtn: true, 
     width: 700, 
     onSubmit: addFormData, 
     height: 200 
    }); 

    //This function adds paramaters to the post of flexigrid. You can add a verification as well by return to false if you don't want flexigrid to submit   
    function addFormData(){ 
     //passing a form object to serializeArray will get the valid data from all the objects, but, if the you pass a non-form object, you have to specify the input elements that the data will come from 
     var dt = $('#sform').serializeArray(); 
     $("#flex1").flexOptions({params: dt}); 
     return true; 
    } 

    $('#sform').submit(function(){ 
     $('#flex1').flexOptions({newp: 1}).flexReload(); 
     return false; 
    }); 
    </script> 
    </body> 
    </html> 
+0

미안, 나는 '년후 가정 내 원래의 질문에서 아주 명확. 나는 특별히 여기에 제공된대로 Flexigrid jQuery 데이터 그리드 개체를 포함하는 솔루션을 찾고있었습니다. http://flexigrid.info/ – pbanka

+0

예, 그게 제가 언급 한 것입니다. flexgrid를 HTML 테이블과 연결해야합니다. Flexigrid는 다양한 테이블 속성을 수정하고 장식을 추가하여 유용하게 만듭니다. 그런 다음 고전 Javascript 또는 jQuery를 사용하여 연관된 HTML 테이블을 제어 할 수 있습니다. 원하는 항목으로 변경하려면 table.innerHTML을 사용하십시오. – exebook

0

우리 사이트에서 이미이 프레임 워크를 사용 했으므로 dojo를 사용하여이를 해결했습니다. 서로 다른 라이브러리에 비슷한 솔루션이 있다고 확신합니다. 기본적으로 내가는 flexigrid를 생성 한 후, flexigrid에 데이터 통지가없는 경우 하나가 지정되면 테이블에 배경 이미지에두고 새로운 클래스 생성 :

dojo.provide("app.components.EmptyStateFlexigrid"); 
dojo.require("dijit._Widget"); 

// Provides a custom Flexigrid with an empty-state 
dojo.declare("app.components.EmptyStateFlexigrid", [dijit._Widget], { 
    emptyStateUrl: null, 
    id: null, 
    url: null, 
    colModel: null, 
    buttons: null, 
    sortField: null, 
    sortOrder: null, 
    height: null, 
    usePager: null, 
    resizable: null, 

    // Create the flexigrid object 
    makeGrid: function() { 
     var gridObj = $('#' + this.id + "_flexigrid"); 
     gridObj.flexigrid({ 
      url: this.url, 
      dataType : 'json', 
      colModel : this.colModel, 
      buttons : this.buttons, 
      sortname : this.sortField, 
      sortorder : this.sortOrder, 
      height: this.height, 
      usepager : this.usePager, 
      resizable: this.resizable, 
      onSuccess: this.checkEmptyState, 
      useRp : true, 
      rpOptions: [2, 10, 15, 20, 30, 50], 
      rp : 15, 
      showTableToggleBtn : false 
     }); 
    } 
}, 

// EMPTY-STATE: make a nice graphic here if there is no data 
// Note that "this" is a flexigrid object 
checkEmptyState: function() { 
    var self = dijit.byId(this.id); 
    var gridObj = $('#' + this.id + "_flexigrid"); 
    if (gridObj[0].id === this.id + '_flexigrid') { 
     var gridChildren = gridObj.children(); 
     if (gridChildren.length === 0) { 
      var gblocks = $(".gBlock"); 
      for (var i = 0; i < gblocks.length; i++) { 
       var styleObj = gblocks[i].style; 
       // The only way I could find to identify "our" flexigrid (if there is 
       // more than one on the page) is to test to see if the height is the 
       // same as our height. Kind of a lousy hack, but the best I could figure 
       // out. -pbanka 
       if (styleObj.height == self.height + 'px') { 
        styleObj.backgroundSize = "450px"; 
        styleObj.backgroundRepeat = "no-repeat"; 
        styleObj.backgroundImage = "url('" + self.emptyStateUrl + "')"; 
       } 
      } 
     } 
    } 
},