Kendo ui 剑道UI网格编辑问题

Kendo ui 剑道UI网格编辑问题,kendo-ui,kendo-grid,inline-editing,Kendo Ui,Kendo Grid,Inline Editing,我尝试使用剑道格网,发现了一些问题 当我单击时,按钮操作“编辑”和“删除”不起任何作用,但是如果我将“创建”命令放入传输中,当我单击“删除”或单击“编辑”>“取消”(更新按钮也不起任何作用)时,网格会为创建URL命令发送大量帖子 我做错了什么 我的代码: <div id="grid"></div> <script type="text/x-kendo-template" id="template"> <div class="toolbar">

我尝试使用剑道格网,发现了一些问题

当我单击时,按钮操作“编辑”和“删除”不起任何作用,但是如果我将“创建”命令放入传输中,当我单击“删除”或单击“编辑”>“取消”(更新按钮也不起任何作用)时,网格会为创建URL命令发送大量帖子

我做错了什么

我的代码:

<div id="grid"></div>
<script type="text/x-kendo-template" id="template">
    <div class="toolbar">      
    <input type="number" min="0" id="item-id" maxlength="10"  />
    <input type="text" id="name" class="k-textbox" placeholder="..." />
    <button style="width: 100px" id="btn-grid-filtrar" class="k-button" >Filter</button>
</div>
</script>

<script>
    $(document).ready(function() {

        var dataSource = new kendo.data.DataSource(
        {
            schema: 
            {
                data: "data",
                total: "total",
                model: 
                {
                    id: "data",
                    fields: 
                    {
                        id: { editable: false, nullable: false },
                        nome: { type: "string", validation: { required: true} },
                        ativo: { type: "boolean" }
                    }
                }
            },                  
            transport: 
            {
                read: 
                {
                    url: "page",
                    dataType: "json",
                    type: "POST",
                    data: additionalData
                },
                update: {
                    url: "update",
                    dataType: "jsonp"
                },
                destroy: {
                    url: "delete",
                    dataType: "jsonp"
                }
                /*,
                create: {
                    url: "add",
                    dataType: "jsonp"                   
                }
                */
            },
            pageSize: 5,
            serverSorting: true,
            serverPaging: true,
        });

        var grid = $("#grid").kendoGrid({
            dataSource: dataSource,
            sortable: true,
            pageable: {
                input: true,
                numeric: false
            },
            batch: true,
            columns: [
                { field: "id", title: "#", width: "60px" }, 
                { field: "nome", title: "Nome" }, 
                { field: "ativo", title: "Ativo", width: "60px", template: "#= ativo ? 'Sim' : 'Não' #" },
                { command: ["edit", "destroy"], title: "Ações", width: "200px" }
            ],
            editable: "inline",
            toolbar: kendo.template($("#template").html()),             
        });

        kendo.bind($(".toolbar"));

        $("#id").kendoNumericTextBox({
            format: "##########",
            placeholder: "..."
        });

        $("#btn-grid-filtrar").click(function() {
            grid.data("kendoGrid").dataSource.read();
        });
    });

    function additionalData() {
        return {
            filtro_id: $("#item-id").val(),
            filtro_nome: $("#name").val()
        };
    }

</script>

滤器
$(文档).ready(函数(){
var dataSource=new kendo.data.dataSource(
{
模式:
{
数据:“数据”,
总计:“总计”,
型号:
{
id:“数据”,
领域:
{
id:{editable:false,nullable:false},
nome:{type:“string”,验证:{required:true},
ativo:{type:“boolean”}
}
}
},                  
运输:
{
阅读:
{
url:“页面”,
数据类型:“json”,
类型:“POST”,
数据:附加数据
},
更新:{
url:“更新”,
数据类型:“jsonp”
},
销毁:{
网址:“删除”,
数据类型:“jsonp”
}
/*,
创建:{
网址:“添加”,
数据类型:“jsonp”
}
*/
},
页面大小:5,
对,,
对,,
});
var grid=$(“#grid”).kendoGrid({
数据源:数据源,
可排序:是的,
可分页:{
输入:正确,
数字:false
},
批次:对,
栏目:[
{字段:“id”,标题:“#”,宽度:“60px”},
{字段:“nome”,标题:“nome”},
{字段:“ativo”,标题:“ativo”,宽度:“60px”,模板:“#=ativo?'Sim':'N#o'”,
{命令:[“编辑”、“销毁”],标题:“Ações”,宽度:“200px”}
],
可编辑:“内联”,
工具栏:kendo.template($(“#template”).html(),
});
绑定($(“.toolbar”);
$(“#id”).kendonumeric文本框({
格式:“#########”,
占位符:“…”
});
$(“#btn网格过滤器”)。单击(函数(){
grid.data(“kendoGrid”).dataSource.read();
});
});
函数additionalData(){
返回{
过滤器id:$(“#项目id”).val(),
过滤器名称:$(“#名称”).val()
};
}

您不应该为本地数据源定义传输级别,如果正确理解您的代码,您不会在任何地方发布-您没有绑定任何远程数据,我看不到任何url?遵循这个例子

首先,我假设您的服务器提供的JSON格式如下:

{
    "total": 2,
    "data" : [
        {
            "data" : 23,
            "id"   : 1,
            "ativo": true,
            "nome" : "stock-1"
        },
        {
            "data" : 34,
            "id"   : 2,
            "ativo": false,
            "nome" : "stock-2"
        }
    ]
}
对吗

因此,第一件事是将每行
data
上的“数据”更改为不称为
data
的内容。事实证明,
data
是KendoUI中的一种保留字,常用于代码结构中,如下所示:

with (data) {
    // Expanded code coming from a grid row data
}
其中,
数据
是引用网格中某行的变量。因此,在这个上下文中,
data
既是行本身,也是该行中的一个字段,因此JavaScript无法正确地解决它

因此,您可以将模式定义为:

schema       : {
    data : "data",
    total: "total",
    model: {
        id    : "_data",
        fields: {
            id   : { editable: false, nullable: false },
            nome : { type: "string", validation: { required: true} },
            ativo: { type: "boolean" }
        }
    }
},
注意:我已将
数据
替换为
\u数据

传输的数据是:

{
    "total": 2,
    "data" : [
        {
            "_data" : 23,
            "id"   : 1,
            "ativo": true,
            "nome" : "stock-1"
        },
        {
            "_data" : 34,
            "id"   : 2,
            "ativo": false,
            "nome" : "stock-2"
        }
    ]
}

只需做这个小小的更改,您的
编辑
按钮就会开始工作。

Thx@OnaBai。问题解决了。我更改了我的模型ID,它就工作了!我的代码现在可以正常工作了。url:“更新”指向正确的命运。我只是不放完整的URL,比如剑道示例。当你说“很多帖子”时,你的意思是当你点击一个命令按钮时,你看到的是多个请求,而不是一个到预期URL的请求?