2013-10-03 12 views
7

Używam siatki kendo z siatką hierarchiczną (siatka nadrzędna i podsieci) z custom.command; Po kliknięciu przycisku podglądu podrzędnego (w przypadku siatki rodzicielskiej działa dobrze), powinna wywoływać funkcję skryptu java, która pokazuje szczegóły dla tego wiersza, ale co się dzieje, to to, że wywołuje javascript dwa razy, po raz pierwszy mając poprawny identyfikator wiersza (tj. w tym samym wierszu), a następnie po raz drugi z nieprawidłowym identyfikatorem (tj. pierwszym identyfikatorem sieci macierzystej).Siatka niestandardowa Polecenie posiadające hierarchię dwukrotnie wywołuje funkcję javascript.

Kod jest jak poniżej.

Parent-Grid

@(Html.Kendo().Grid<IRIS.Web.BackOffice.ViewModels.AuditListView>() 
.Name("GridAudit") 
.Columns(column => 
    { 
     column.Bound(model => model.LogId).Visible(true); 
     column.Bound(model => model.Date); 
     column.Bound(model => model.Time); 
     column.Bound(model => model.User).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("User")); 
     column.Bound(model => model.Module).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Module")).Width(150); 
     column.Bound(model => model.Activity); 
     column.Bound(model => model.Description).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Description")).Width(200); 
     column.Command(command => 
     { 
      command.Custom("View").Text(" ").Click("onParentAuditHirarchy"); 
     }).Width("6em").Title("Actions"); 
    }) 
.Reorderable(reorder => reorder.Columns(true)) 
.Selectable(select => select.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)) 
.ClientDetailTemplateId("template1") 
.Sortable() 
.Scrollable(scroll => scroll.Enabled(false)) 
.Filterable() 
.Pageable(page => page.ButtonCount(5)) 
.HtmlAttributes(new { style = "height:400px" }) 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .Read(read => read.Action("Audit_Load", "AuditLog").Data("getSearchData") 
) 
.PageSize(11) 
) 
) 

Child-Grid

<script id="template1" type="text/kendo-tmpl"> 
@(Html.Kendo().Grid<IRIS.Web.BackOffice.ViewModels.AuditListView>() 
    .Name("GridDetails" + "#=LogId#") 
    .AutoBind(true) 
    .Resizable(resize => resize.Columns(true)) 
    .Reorderable(reorder => reorder.Columns(true)) 
    .Columns(column => 
    { 
     column.Bound(model => model.LogId).Visible(true); 
     column.Bound(model => model.Date); 
     column.Bound(model => model.Time); 
     column.Bound(model => model.User).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("User")); 
     column.Bound(model => model.Module).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Module")).Width(150); 
     column.Bound(model => model.Activity); 
     column.Bound(model => model.Description).Width(200);//.ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Description")).Width(200); 
     column.Command(command => 
     { 
      command.Custom("View").Text(" ").Click("onGridAuditHirarchy"); 
     }).Width("6em").Title("Actions"); 
    }) 
    .Selectable() 
    .ClientDetailTemplateId("template2") 
    .Sortable() 
    .HtmlAttributes(new { style = "height:300px;" }) 
    .Scrollable(scroll => scroll.Enabled(false)) 
    .Filterable() 
    .Pageable(page => page.ButtonCount(5)) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Read(read => read.Action("LoadHirarchy", "AuditLog", new { auditId = "#=LogId#" })) 
     .PageSize(3) 
    ) 
    .ToClientTemplate() 
) 
</script> 

JavaScript

<script type="text/javascript"> 

function GetAuditId() { 
    return { 
     auditId: $(hdnTempGridId).val() 
    } 
} 

onParentAuditHirarchy = function (e) { 
    e.preventDefault(); 
    var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
    var id = dataItem.LogId; 

     $(hdnTempGridId).val(id); 

     var win = $("#window").data("kendoWindow"); 
     var grid = $("#GridDetails").data("kendoGrid"); 
     grid.dataSource.read(); 

     win.setOptions({ 
      width: 900, 
      height: 400 
     }); 

     win.open(); 
     win.center(); 


} 

onGridAuditHirarchy = function (e) { 
    e.preventDefault(); 
    var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
    var id = dataItem.LogId; 

    if (e.delegateTarget.id != 'GridAudit') { 
     $(hdnTempGridId).val(id); 

     var win = $("#window").data("kendoWindow"); 
     var grid = $("#GridDetails").data("kendoGrid"); 
     grid.dataSource.read(); 

     win.setOptions({ 
      width: 900, 
      height: 400 
     }); 

     win.open(); 
     win.center(); 
    } 

} 

$(document).ready(function() { 
    var win = $("#window").data("kendoWindow"); 
    win.close(); 

}); 
</script> 

A potem przez okno skryptu java Kendo jest otwarty.

@(Html.Kendo().Window() 
    .Name("window") //The name of the window is mandatory. It specifies the "id" attribute of the widget. 
    .Title("Audit Log Detail(s)") //set the title of the window 
    .Content(@<text> 
     @(Html.Kendo().Grid<IRIS.Web.BackOffice.ViewModels.AuditDetailListModel>() 
    .Name("GridDetails") 
    .AutoBind(false) 
    .Resizable(resize => resize.Columns(true)) 
    .Reorderable(reorder => reorder.Columns(true)) 
    .Selectable() 
    .Sortable() 
    .HtmlAttributes(new { style = "height:300px;" }) 
    .Scrollable(scroll => scroll.Enabled(false)) 
    .Filterable() 
    .Pageable(page => page.ButtonCount(5)) 

    .DataSource(dataSource => dataSource 
       .Ajax() 
       .Read(read => read.Action("LoadDetails", "AuditLog").Data("GetAuditId")) 
       .PageSize(10) 
      ) 
) 
      </text>) 
    .Visible(false) 
    .Modal(true) 
) 
+0

Mam również ten problem. i nie sądzę, że to wywołanie funkcji dwa razy zamiast wywoływania funkcji i funkcji nadrzędnej też, w moim przypadku mam 4-poziomowe siatki hierarchii na czwartym poziomie to się nazywa 4 razy! – Star

Odpowiedz

1

Można obejść ten problem poprzez sprawdzenie, czy element pokazany w pierwszym przypadku poleceń jest widoczny:

function showDetailsLevel(e) { 
    e.preventDefault(); 
    originatingId = this.dataItem($(e.currentTarget).closest("tr")).Id 

    var wnd = $("#Details").data("kendoWindow"); 

    if (!$("#Details").is(":visible")) { 
     wnd.center(); 
     wnd.open(); 
     var grid = $("#DetailGrid").data("kendoGrid"); 
     grid.dataSource.read(); 
    } 
} 
1

I zorientowaliśmy się wreszcie (dla mojego problemu przynajmniej)

na nazwa akcji niestandardowej nie może być taka sama w rodzicem a dzieckiem siatki

command.Custom("View")//parent 
command.Custom("View")//child 

więc uczynić go

command.Custom("View1")//parent 
command.Custom("View2")//child 

Mam nadzieję, że to uratuje komuś czas.

+0

Chyba nie mogę odebrać mojej nagrody :) – Star

Powiązane problemy