2013-03-21 4 views
5

Eventi ho semplice pagina con Kendo TabStrip all'internoKendo TabStrip con KendoGrid all'interno usando JavaScript per movimentazione

<div id="main-view" class="k-content"> 
    @(Html.Kendo().TabStrip() 
      .Name("main-view-tabstrip") 
      .Items(tabstrip => 
       { 
        tabstrip.Add().Text("My Notices").LoadContentFrom("MyNotices", "Notice").Selected(true); 
       })) 
</div> 

Si carica di contenuti per me su richiesta, interrogando il NoticeController. NoticeController ha l'azione MyNotices restituendomi PartialView.

public PartialViewResult MyNotices() 
{ 
    // put some values into ViewData 

    return PartialView(); 
} 

Il PartialView itseld assomiglia a questo:

<div style="margin: 20px; height: 700px;"> 
    @(Html.Kendo().Grid<NoticeViewModel>(Model) 
     .HtmlAttributes(new { @class = "fullScreen" }) 
     .Name("NoticesList") 
     .Columns(columns => 
      { 
       columns.Bound(x => x.UniqueId).Title("UniqueId"); 
       columns.Bound(x => x.FormName).Title("Form"); 
       columns.Bound(x => x.Revision).Title("Revision"); 
       columns.Bound(x => x.Language).Title("Language"); 
       columns.Bound(x => x.Status).Title("Status"); 
      } 
    ) 
     .Pageable() 
     .Scrollable() 
     .Sortable() 
     .Selectable() 
     .ToolBar(
      toolbar => toolbar.Create().Text("New") 
    ) 
     .Editable(
      ed => ed.Mode(GridEditMode.PopUp) 
       .TemplateName("NoticeCreate") 
       .Window(w => w.Title("Create Notice") 
        .Name("createNoticeWindow1") 
        .HtmlAttributes(new { id = "createNoticeWindow" }) 
        .Modal(true) 
        ) 
       .DisplayDeleteConfirmation(true) 
       ) 
     .Resizable(resize => resize.Columns(true)) 
     .DataSource(dataSource => dataSource.Ajax() 
              .PageSize(25) 
              .ServerOperation(true) 
              .Read("List", "Notice") 
              .Create("NoticeCreate", "Notice") 
              .Events(events => events.Error("errorHandler")) 
              .Model(model => model.Id(x => x.UniqueId)) 

    )) 
</div> 

<script> 
    function errorHandler(e) { 
     if (e.errors) { 
      var message = "Errors:\n"; 
      $.each(e.errors, function (key, value) { 
       if ('errors' in value) { 
        $.each(value.errors, function() { 
         message += this + "\n"; 
        }); 
       } 
      }); 
      alert(message); 
     } 
    } 
</script> 

Quando eseguo il codice che viene visualizzato l'errore JS, che errorHandler non può essere trovato. Come puoi vedere ce l'ho dentro il mio PartialView.

<script> 
    function errorHandler(e) { 
     if (e.errors) { 
      var message = "Errors:\n"; 
      $.each(e.errors, function (key, value) { 
       if ('errors' in value) { 
        $.each(value.errors, function() { 
         message += this + "\n"; 
        }); 
       } 
      }); 
      alert(message); 
     } 
    } 
</script> 

Quindi la domanda è come utilizzare javascript all'interno vista parziale, quando si mostra dentro TabStrip?

Quando rimuovo .Events(events => events.Error("errorHandler")) dalla griglia, tutto funziona correttamente.

risposta

5

Risolto il problema, non so perché, ma quando metto il blocco di script Java all'inizio inizia a funzionare.

Quindi, se qualcuno incontra tale problema, basta inserire il blocco <script/> prima di dichiarare Kendo.Grid().

+3

Ho visto questo comportamento anche con i wrapper di server Kendo e mvc, re: gli eventi JS dichiarati nel wrapper lato server devono essere scritti sopra il wrapper. –

+0

Se si apre la console durante il caricamento della pagina, probabilmente si vedrà un errore simile a "errorHandler non è dichiarato". Questo perché quando la pagina viene caricata, il widget Kendo cercherà la funzione, e se è dichiarata sotto, significa che la griglia non sarà in grado di trovarla perché deve ancora essere analizzata. – Pizzaboy