【问题标题】:How to override editing row and call custom edit in jsgrid如何覆盖编辑行并在jsgrid中调用自定义编辑
【发布时间】:2018-09-05 04:34:06
【问题描述】:

如下所示尝试了How to customize edit event in JsGrid。但是好像不行

$("#jsgrd").jsGrid({
  data: ds,
  fields: [{
    type: "control",
    editItem: editrow(item)
  }, ]
});

function editrow(item) {
  var $row = this.rowByItem(item);
  if ($row.length) {
    console.log('$row: ' + JSON.stringify($row)); // I modify this
    this._editRow($row);
  }
}

我现在得到的错误是“项目”未定义。

我正在寻找的是,当用户单击编辑时,我想将rowid 存储在隐藏的列中,并使用它从服务器获取更多数据并填充到 jsgrid 之外。并避免将行更改为编辑模式

【问题讨论】:

  • editItem 使用错误。 editItem 不是回调函数。这是一种方法。您调用此方法以编程方式打开特定行的编辑。发生这种情况时,将触发默认编辑模式,或者如果您在 editTemplate 中有自定义代码。

标签: jsgrid


【解决方案1】:

您没有使用记录在案的方式。你应该使用editTemplate

一个简单的工作示例是:

 $(document).ready(function() {
 $("#grid").jsGrid({
    width: "100%",
    editing: true,
    autoload: true,
    data: [ { id:1, name:"Tom"}, {id:2, name:"Dick"}],
    fields: [
             { name: "id", type: "text", title: "Id"},
             { name: "name", type: "text", title: "Name", 
                 editTemplate: function(item) {
                   return "<input type='checkbox'>" + item;
             }},
             { type: "control"}
           ]
     });
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid-theme.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.js"></script>

<div id="grid">
Test
</div>

为了便于说明,我将名称字段的编辑从标准文本框变成了复选框。

【讨论】:

  • 谢谢。但我不想使用网格的编辑属性。我想使用编辑按钮点击两件事。一种是在行中获取一个值并调用另一个js函数。所以在编辑点击它不应该显示文本框/复选框。
  • 哦,那你可以用rowClick来启动你自己的模态对话框,比如rowClick: function(args) { myDialog(args.item) });。简要文档位于js-grid.com/docs/#rowclick
【解决方案2】:

您可以使用itemTemplate 来获得所需的结果。

  • itemTemplate 是一个创建单元格内容的函数。它应该以字符串、DomNode 或 jQueryElement 的形式返回标记。函数签名为function(value, item),其中value为数据项的列属性value,item为行数据item

itemTemplate 内部,您可以根据自己的要求自定义 dom 元素。

运行演示

$("#jsGrid").jsGrid({
    width: "100%",
    height: "auto",
    paging: false,

    //for loadData method Need to set auto load true
    autoload: true,

    noDataContent: "Directory is empty",

    controller: {
        loadData: function(filter) {
            var data = [{
                id: 1,
                nickname: "Test",
                email: "t@gmail.com"
            }, {
                id: 2,
                nickname: "Test 1",
                email: "t1@gmail.com"
            }, {
                id: 3,
                nickname: "Test 2",
                email: "t2@gmail.com"
            }, {
                id: 4,
                nickname: "Test 3",
                email: "t3@gmail.com"
            }];
            return data;
        }
    },

    fields: [{
        name: "nickname",
        type: "text",
        width: 80,
        title: "Name"
    }, {
        name: "email",
        type: "text",
        width: 100,
        title: "Email Address",
        readOnly: false
    }, {
        type: "control",

        itemTemplate: function(value, item) {
            var editDeleteBtn = $('<input class="jsgrid-button jsgrid-edit-button" type="button" title="Edit"><input class="jsgrid-button jsgrid-delete-button" type="button" title="Delete">')
                .on('click', function (e) {
                    console.clear();
                    if (e.target.title == 'Edit') {
                        //Based on button click you can make your customization  
                        console.log(item); //You can access all data based on item clicked
                        e.stopPropagation();
                    } else {
                        //Based on button click you can make your customization
                        console.log('Delete')
                    }
                });

            return editDeleteBtn; //
        },
    }]
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.css" />

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid-theme.min.css" />

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.js"></script>

<div id="jsGrid"></div>

【讨论】:

  • 谢谢!当我运行代码 sn-p 时,它可以工作。但是,当将相同的代码复制到 js 文件中时,我会收到语法错误。 “`”这个字符不起作用
  • ok 代替这个字符 "`" 你可以使用 '.所以不会出错。我已经更新了我的答案,你现在可以查看。
  • 现在错误出现在此部分 ` => { console.clear();` " => " 第一个错误在这里。说“;”预期
  • 另一个答案中给出的editTemplate也对我有用。只有我需要避免在编辑点击时显示编辑模式(文本框/复选框)
  • 现在再次检查我有更新答案删除 ES6 语法。在我的解决方案中,它没有显示Textbox/checkbox。您可以再次检查
猜你喜欢
  • 2023-03-20
  • 2012-11-15
  • 1970-01-01
  • 2015-01-29
  • 2013-07-06
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多