2013-03-21 53 views
5

的JavaScript我有簡單的頁面與劍道TabStrip控件內劍道TabStrip控件與KendoGrid內使用事件處理

<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> 

它加載的內容對我來說點播,查詢NoticeControllerNoticeController已將MyNotices動作返還給我PartialView

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

    return PartialView(); 
} 

的PartialView itseld看起來是這樣的:

<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> 

當我運行代碼,我收到JS錯誤,那errorHandler無法找到。正如你所看到的,我在我的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> 

所以問題是如何在部分視圖中使用JavaScript,當你在TabStrip中顯示它?

當我從網格中刪除.Events(events => events.Error("errorHandler"))時,一切工作正常。

回答

5

解決了這個問題,我不是爲什麼,但是當我把java腳本塊放在一開始就開始工作。

所以,如果有人遇到這樣的問題,只需在<script/>區塊之前宣佈Kendo.Grid()

+3

我已經看到這個行爲以及與Kendo和mvc服務器包裝,重新:JS服務器端包裝器中聲明的事件需要寫在包裝上。 – 2013-03-21 16:08:38

+0

如果您在頁面加載期間打開控制檯,您可能會看到類似「errorHandler未聲明」的錯誤。 這是因爲在頁面被加載時,Kendo小部件會查找該函數,如果它在下面聲明,則意味着該網格將無法找到它,因爲它仍然需要被解析。 – Pizzaboy 2015-06-30 08:10:39