如何在Master-Detail Kendo网格行扩展中始终调用一个函数?

问题描述 投票:0回答:1

我在AngularJS的Kendo Grid中使用Master detail.以下是代码的设置:在cshtml中是。

        <script type="text/x-kendo-template" id="template">                                                  
                   <div>
                        <div class="orders"></div>
                   </div>                                                   
        </script>

在AngularJS控制器中是

      The MasterRowId is the id of the Column in the Master row. So the Master grid is a grid with 
   columns Id and  name

    $scope.getorders = function (masterRowId)
    {           
        myservice.getorders(masterRowId)
            .then(function (result) {
                for (var j = 0; j < result.data.length; j++)
                    $scope.ordergroupdata.push(result.data[j]);                    
            });

    }

在主网格定义中,我有......。

        detailTemplate: kendo.template($("#template").html()),
        detailInit: $scope.detailInit,

$scope.detailInit的定义是......。

    $scope.detailInit = function (e)
    {
        $scope.MasterRowId = e.data.Id;                       
        $scope.getorders ($scope.MasterRowId); 

        var orderdata = $scope.ordergroupdata;
        var orderdatasource = new kendo.data.DataSource({                
            transport: {
                read: function (e) {
                    e.success(orderdata);
                },
                update: function (e) {
                    e.success();
                },
                create: function (e) {
                    var item = e.orderdata;
                    item.Id = orderdata.length + 1;
                    e.success(item);
                }
            },
            schema: {
                model: {
                    id: "Id",
                    fields: {
                        OrderId: { type: 'string'},                                                   
                    }
                }
            },                
        });
        e.detailRow.find(".orders").kendoGrid({
            dataSource: orderdatasource,                                      
            columns: [
                { field: "OrderId", title: "OrderId" },                         
            ]
        });
    }

问题是,如果我点击第一行,我可以根据MasterRowId从我的MVC动作方法中获取数据。所以如果我点击第一行,MasterRowId是10,那么我得到的OrderId是 "1234",我可以点击第二行,MasterRowID是15,它将检索到OrderId是 "8231",但是如果我回到第一行,细节网格中的数据(OrderId)实际上是第二行的数据,所以它是 "8321 "而不是 "1234"。我怎样才能总是调用$scope.detailInit,这样我就可以回到MVC的Action方法,并总是为那行检索到正确的数据与MasterRowId? 一旦我展开那行,并移动到另一行,detailInit就不会再为那行被调用?

angularjs kendo-grid
1个回答
0
投票

detailInit 只在第一次展开时被调用,但你可以使用 detailExpand 每次展开详情表时都会被调用。

正式的例子。

<script>
$("#grid").kendoGrid({
  columns: [
    { field: "name" },
    { field: "age" }
  ],
  dataSource: [
    { name: "Jane Doe", age: 30 },
    { name: "John Doe", age: 33 }
  ],
  detailTemplate: "<div>Name: #: name #</div><div>Age: #: age #</div>",
  detailExpand: function(e) {
    console.log(e.masterRow, e.detailRow);
  }
});
</script>

Docs: detailExpand

官方示例。detailExpand例子

© www.soinside.com 2019 - 2024. All rights reserved.