剑道网格-访问和操作项目对象



我的六个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()我得到undefined

我做错了什么?

您可以使用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);
};

请参考这里的实际示例

最新更新