0

我有一个问题,工作了三天,但找不到任何解决方案!!!在 document.ready 中,我创建了一个带有子对象的数据源

var datasource = [
  {
   "category": {
      "id_category": 1,
      "desc_category": "Beverages"
  },
   "id_product": 1,
      "desc_product": "Chai",
      "price": "11",
      "id_category": 1
  },
  {
   "category": {
      "id_category": 2,
      "desc_category": "Condiments"
  },
    "id_product": 2,
      "desc_product": "Aniseed Syrup",
      "price": "12",
      "id_category": 2
 }
]

然后我创建了一个 kendogrid

var kendoGrid = $("#grid").kendoGrid({

    selectable: true,
    dataSource: datasource,
    resizable: true,
    toolbar: [{
        name: "create",
        text: "Add Something"
    }],
    columns: [
        { field: "desc_product", title: "Description", width: 100 },
        { field: "price", title: "Price", width: 100 },
        { field: "id_product", title: "Category", width: 200, editor: categoryDropDownEditor, template: '#=category.desc_category#' },
        {
            command: [{
                name: "destroy",
                text: "Delete",
                confirmation: "Are you sure?"
            },
            {
                name: "edit",
                text: {
                edit: "Edit",
                update: "Update",
                cancel: "Cancel"
            }
            }
            ]
        }
    ],
    width: 200,
    height: 300,
    editable: editable = {
        mode: "inline",
        confirmation: "Are you sure?"
    }
});

最后是在编辑模式下填充网格中组合框的功能

function categoryDropDownEditor(container, options) {
var ds = [
{         
      "id_category": 1,
      "desc_category": "Beverages"
},
{
   "id_category": 2,
   "desc_category": "Condiments"
},
{
   "id_category": 3,
   "desc_category": "Confections"
},
{
   "id_category": 4,
   "desc_category": "Produce"
},
{
   "id_category": 5,
   "desc_category": "Sea Food"
}
];

$('<input data-text-field="desc_category" data-value-field="id_category" data-bind="value:' + options.field + '"/>"')
  .appendTo(container)
  .kendoComboBox({
      index: 0,
      placeholder: "Select Category",
      dataTextField: "desc_category",
      dataValueField: "id_category",
      dataSource: ds
  })
}   

问题是当我尝试添加新记录时,它运行错误(运行时错误:类别未定义)。

有人可以告诉我数据源是否正确吗?代码结构对吗?哪里有问题?

希望可以有人帮帮我!!!

4

2 回答 2

2

问题是,当您创建新记录时category未定义且未定义,因为您schema.modelDataSource. 在调用该categoryDropDownEditor函数之前,它实际上会实例化template并产生错误。

修复中的错误template非常容易,您只需要执行以下操作:

template: '#= data.category ? data.category.desc_category : 1 #'

它检查data当前行的实际已category定义。

但是,这将带您进入下一个问题,即您无法关闭,popup因为没有schema.model定义。

您可以尝试将其定义DataSource为:

var datasource = new kendo.data.DataSource({
    data  : [
        {
            "category"    : {
                "id_category"  : 1,
                "desc_category": "Beverages"
            },
            "id_product"  : 1,
            "desc_product": "Chai",
            "price"       : "11",
            "id_category" : 1
        },
        {
            "category"    : {
                "id_category"  : 2,
                "desc_category": "Condiments"
            },
            "id_product"  : 2,
            "desc_product": "Aniseed Syrup",
            "price"       : "12",
            "id_category" : 2
        }
    ],
    schema: {
        model: {
            id    : "id_category",
            fields: {
                desc_product: { type: "string" },
                price       : { type: "number" }
            }
        }
    }
});
于 2013-08-20T19:39:25.107 回答
1

添加新记录时,应在 columns.field 中设置默认值。由于未声明 classe_iva 变量,因此引发错误。尝试将其声明为全局。希望这可以帮助。

于 2013-08-30T17:28:49.463 回答