Cakephp 剑道ui网格下拉列表填充对象对象

Cakephp 剑道ui网格下拉列表填充对象对象,cakephp,kendo-ui,kendo-grid,kendo-dropdown,Cakephp,Kendo Ui,Kendo Grid,Kendo Dropdown,我试图实现Cakephp kendo ui grid dropdownlist来编辑ColumPartner_type_id,但由于dropdownlist填充[object][object]而卡住 这是我的代码: $(function() { var dataSource = new kendo.data.DataSource({ batch: true, pageSize:10, transport: {

我试图实现Cakephp kendo ui grid dropdownlist来编辑ColumPartner_type_id,但由于dropdownlist填充[object][object]而卡住

这是我的代码:

$(function() {
    var dataSource = new kendo.data.DataSource({
        batch: true,
        pageSize:10,        
        transport: {
            read: {
                url:"<?php echo $this->Html->url('/Partners/get_partner',true)?>",
                dataType:"json",
            }
        },
        schema: {
            id:"Partner.id",
        }
    });     

    $("#grid").kendoGrid({
        dataSource: dataSource,             
        columns: [
            { field: "Partner.name"},
            { field: "Partner.partner_type_id", 
             template: "#: PartnerType.name #", editor: categoryDropDownEditor
            },
            { command: ["edit"], title: "&nbsp;", width: "182px" }
        ],
        toolbar: ["create", "save", "cancel","destroy"],
        height: 400,
        navigatable: true,
        pageable: {
            refresh: true,
            pageSizes:true
        },
        editable:"inline" ,    
        filterable: {
            extra: false,
            operators: {
                string: {
                    startswith: "Starts with",
                    eq: "Is equal to",
                    neq: "Is not equal to"
                }
            }
        },       
    });      

    function categoryDropDownEditor(container, options) {
        $('<input required required data-text-field="PartnerType.name" data-value-field="Partner.id" data-bind="value:' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: false,
            dataSource: {
                transport: {
                    read: {
                        url:"<?php echo $this->Html->url('/Partners/get_partner_type',true)?>",
                        dataType:"json",
                    }    
                },
            },
        });
    }      
});
正如您所知,我使用嵌套JSon,这有问题吗?我曾尝试使用相同代码的原生PHP和MySql平面Json,效果很好

/合作伙伴/获取合作伙伴回报如下: [{合伙人:{id:1,姓名:詹姆斯国王,合伙人类型{id:2},合伙人类型:{id:2,姓名:卖方}]

/合作伙伴/获取合作伙伴类型返回如下: [{PartnerType:{id:1,名称:Customer},{PartnerType:{id:2,名称:Vendor}]


有人愿意分享吗

看起来您遇到了文件名不匹配问题 编辑器名称应与网格字段名称匹配 在您的情况下,字段是

帕特纳{ 帕特尼德, PatnerName; }

因此,请在代码中保持一致,如下所示,其他wise editor列将保持显示[object object],因为它找不到正确的属性名称

$(function() {
var dataSource = new kendo.data.DataSource({
   batch: true,
     pageSize:10,       
     transport: {
         read: {
                url:"<?php echo $this->Html->url('/Partners/get_partner',true)?>",

                dataType:"json",
         }

     },

schema: {

  id:"PartnerID",
  Patner: { defaultValue: { PartnerID: 1, PatnerName: "Jhon Doe"} }


}
})


在具有可编辑dropdownlist的剑道网格中,问题在于网格数据源中dropdownlist字段的值。不是dropdownlist的数据源

如果该字段的值为空,则当您尝试编辑它时,它将显示[object]

我通过在填充数据源时为字段设置一个默认值(如果为null)来解决这个问题

挑选 第1栏, 第2栏, 是零ParterName,作为ParterName
从TableName

中,你能举例说明你的下拉列表服务返回了什么吗?这里是屏幕截图:我的意思是JSON。。。如果在浏览器中打开…/Partners/get\u partner\u type,JSON是什么样子的?我的理论是,问题在于JSON的结构,它不仅是字符串数组,而且是对象。但是在数据源定义中,您既没有指定也没有指定,因此KendoUI无法显示正确的信息[{Partner:{id:1,name:King James,Partner_type_id:2},PartnerType:{id:2,name:Vendor}][{PartnerType:{id:1,name:Customer},{PartnerType:{id:2,name:Vendor}]您的JSON无效,您将返回两个数组而不是一个数组。您能检查一下您的服务吗?[{合作伙伴:{id:1,姓名:King James,合作伙伴类型{id:2,姓名:Vendor}}][{合作伙伴类型:{id:1,姓名:Customer}},{合作伙伴类型:{id:2,姓名:Vendor}]
$("#grid").kendoGrid({
  dataSource: dataSource,               
    columns: [

    { field: "Partner.PatnerName"},
    { field: "Partner", 
         editor: categoryDropDownEditortemplate: "#= Partner.PatnerName #"
    },
    { command: ["edit"], title: "&nbsp;", width: "182px" },

 ],

function categoryDropDownEditor(container, options) {
    $('<input required required data-text-field="PatnerName" data-value-field="PartnerID" data-bind="value:' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: false,
            dataSource: {

                transport: {
                     read: {
                            url:"<?php echo $this->Html->url('/Partners/get_partner_type',true)?>",
                            dataType:"json",
                      }    
                },


            },

        });
}