Kendo Grid - 访问和操作项目对象

时间:2016-08-19 19:28:40

标签: kendo-grid

我已经对我的6个Angular-Kendo-UI网格问题做出了完全零响应,所以我会指责并希望我的问题能够得到更广泛的解决。也许有一种更简单的操作网格项的方法。

我想访问包含我的数据的对象(在这种情况下是订单项)。

我的网格行有一个用于选择订单的复选框。当用户选择订单时,我想检索并操作该对象。

// dataSource
vm.masterGrid.dataSource = new kendo.data.DataSource({
    transport:{
        read: function(options) {
             return vm.getOrders(options);
        }
    },
    pageSize: 5,
    serverPaging: true,
});

//options
vm.masterGrid.gridOptions = {
    columns: [
        { title: "Buyer", field: "BuyerName" },
        { 
            title:  "Select", 
            template: "<input " + 
                        type='checkbox'  " + 
                        class='checkbox'  " + 
                        ng-disabled='#=!HasValidCustomsInfo#'  " + 
                        ng-click='ordersVm.selectForPackaging(Id)'  " + 
                        ng-model='Id'/>"
         }
    ]
};

观点:

        <div 
             kendo-grid 
             k-height="'400px'" 
             k-data-source="ordersVm.masterGrid.dataSource" 
             k-options="ordersVm.masterGrid.gridOptions">
        </div>

在这里,我试图获取对象,以便我可以用它来做任务:

// checkbox-click on row
vm.selectForPackaging = function (orderId) {
    console.log(orderId); // returns true (useless)
    console.log(vm.getOrderItemById(99)); // returns [init: {my actual object which I can't access}]
};

(我的get-order-item-by-id帮助函数:)

    vm.getOrderItemById = function (orderId) {
        var matches = $filter('filter')( vm.masterGrid.dataSource.data(), function(gridItem, index) {
            return gridItem.Id == orderId;
        });
    };

我在vm.selectForPackaging中获得的内容实际上包含了我的数据,但它不可用!

在控制台中看起来像这样:

v init {_events: Object, _handlers: Object, OrderLines: init[1], Store: init, Id: 99…}
    AddressIsValid:true
    BuyerEmail:"lance.slack@gmail.com"
    etc...

这没关系,但我无法获得数据!

调用 vm.getOrderItemById(99).init 应该返回我的实际对象。相反,它返回一个函数:

function (e){var t,n,i=this,r=function(){return i};we.fn.init.call(this),this._handlers={};for(n in e)t=e[n],"object"==typeof t&&t&&!t.getTime&&"_"!=n.charAt(0)&&(t=i.wrap(t,n,r)),i[n]=t;i.uid=_e.guid…

如果我调用该函数: vm.getOrderItemById(99).init()我得到未定义

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以使用dataItem方法获取当前行信息

// checkbox-click on row
vm.selectForPackaging = function () {
    var row = $(this).closest("tr"),
    var grid = $(vm.masterGrid).data("kendoGrid"),
    var dataItem = grid.dataItem(row);
    console.log(dataItem);
};

请参阅实时示例here