W2UI网格内联编辑与数据源

时间:2014-09-27 22:07:23

标签: javascript json w2ui

我正在使用w2ui Grid的1.4.1版。我正在尝试使用inline edit从服务器加载数据时执行urls property

$(function () {
    $('#grid').w2grid({ 
        name: 'grid',
        // begin block that causes grid to be uneditable 
        // url: {
        //    get    : '<?php echo site_url('sections')?>/all',
        //    save   : '<?php echo site_url('sections')?>/save'
        // },
        // end block that causes grid to be eneditable
        show: { 
            toolbar: true,
            footer: true,
            toolbarSave: true,
            toolbarEdit: true
        },
        columns: [  
                  { 
                      field: 'code', 
                      caption: 'Code', 
                      size: '120px', 
                      sortable: true, 
                      resizable: true, 
                      editable: { 
                          type: 'text' 
                      }
                  }
                   ],
         // this records array can be removed once the urls are added back
         records: [
             { recid: 1, code: '100' }
         ]

    });    
});

如果我取消注释&#34; url&#34;阻止,&#34;代码&#34;双击时,网格上的字段不再可编辑。如果我删除它,它是。有没有人有一个从服务器动态加载数据的工作示例,同时还允许内联编辑?

ANSWER 如下所述,我的返回结构不正确。我在后端使用CodeIgniter(CI),我的控制器方法如下:

public function all() {
    $data = $this->myModel->findAll ();
    $gridData = new W2GridData ( $data );
    echo $gridData->toJson();  //important to put "echo" here and not "return"
}

我的模型类中的findAll()方法是:

    function findAll() {
        $query = $this->db->get ( TABLE_NAME );
        return $query->result ();
    }

现在包含CI db结果的实用程序类是:

<?php
class W2GridData {
    var $total = "-1";
    var $records = "-1";
    function __construct($items) {
        $this->records = $items;
        $this->total = count ( $this->records );
    }
    function toJson() {
        $strValue = json_encode ( $this );
        return str_replace ( "\"id\":", "\"recid\":", $strValue );  // this line was missing
    }
}

正如你所看到的,我正在回归&#34; id&#34;直接来自数据库,而不是将其转换为w2ui的首选&#34; recid&#34;,因此网格无法正确呈现。

2 个答案:

答案 0 :(得分:3)

我把你的代码完全取消了,取消注释了url并删除了记录。此外,我将它链接到一个静态JSON文件(如果你将它链接到返回JSON的php,应该没有什么不同)。但是,从服务器填充网格后,内联编辑工作正常。我使用的是1.4.1版本。我最好的猜测是(1)你在控制台中有一个javascript错误,或者(2)你的服务器没有返回正确的结构。这是我的JSON文件:

{
  "total": "3",
  "records": [{
     "recid": 1,
     "code": "Some"
  }, {
     "recid": 2,
     "code": "Another"
  }, {
     "recid": 3,
     "code": "More"
  }]
}

答案 1 :(得分:-1)

我的简单方法是添加属性 recid:'id'

$('#grid').w2grid({ 
    name: 'grid',
    recid : 'id'
  });