2017-12-13 10 views
0

백엔드에 신호 연결이있는 뷰에서 검도 그리드가 있습니다. 현재 잘 작동하지만, 면도날 @section 블록을 사용하여 스크립트 태그를 생성 된 페이지 하단으로 이동하고 싶습니다. 검도 UI MVC 그리드에서 SignalR 연결 스크립트를 페이지 하단으로 이동하는 방법

Uncaught Error: The "promise" option must be set. 
at new init (http://localhost:61683/Scripts/kendo/kendo.all.min.js:31:9317) 
at Object.oe.create (http://localhost:61683/Scripts/kendo/kendo.all.min.js:28:13869) 
at new init (http://localhost:61683/Scripts/kendo/kendo.all.min.js:27:22769) 
at Function.ie.create (http://localhost:61683/Scripts/kendo/kendo.all.min.js:28:14660) 
at init._dataSource (http://localhost:61683/Scripts/kendo/kendo.all.min.js:53:11752) 
at new init (http://localhost:61683/Scripts/kendo/kendo.all.min.js:51:10176) 
at HTMLDivElement.<anonymous> (http://localhost:61683/Scripts/kendo/kendo.all.min.js:26:4691) 
at Function.each (http://localhost:61683/Scripts/jquery-1.12.3.js:370:19) 
at jQuery.fn.init.each (http://localhost:61683/Scripts/jquery-1.12.3.js:137:17) 
at jQuery.fn.init.e.fn.(anonymous function) [as kendoGrid] (http://localhost:61683/Scripts/kendo/kendo.all.min.js:26:4668) 

없이 그리드의 하단에 스크립트 태그를 이동하려면 어떤 방법이 있나요 :

<script> 

var dataCollectionHub; 
var hubStart; 
$(function() { 
    dataCollectionHub = $.connection.dataCollectionHub; 
    hubStart = $.connection.hub.start(); 
}); 

</script> 



@(Html.Kendo().Grid<ViewModel>() 
      .Name("grid") 
      .Columns(columns => 
      { 
       columns.Bound(p => p.Name); 
      }) 
      .DataSource(
       dataSource => dataSource 
       .SignalR() 
       .AutoSync(true) 
       .Transport(tr => tr 
        .Promise("hubStart") 
        .Hub("dataCollectionHub") 
        .Client(c => c 
         .Read("read") 
         .Create("create") 
         .Update("update") 
         .Destroy("destroy") 
         ) 
        .Server(s => s.Read("read"))) 
       .Schema(schema => schema 
        .Model(model => 
        { 
         model.Id("Id"); 
         model.Field("Id", typeof(int)).Editable(false); 
         model.Field("Name", typeof(string)).Editable(false); 
        }) 
       ) 
      ) 
) 

문제는 그리드 나는 다음과 같은 오류가 있기 때문에 그 자체 전에 정의 할 수있는 변수를 필요로한다는 것이다 그것을 깨기?

답변

1

아마도 검도 UI의 특징은 Deferring입니다. 일반적으로 스크립트는 즉시 생성되며 초기화하는 동안 모든 변수와 JavaScript 메서드가 있어야합니다.

업데이트 스크립트 :

@(Html.Kendo().Grid<ViewModel>() 
    .Name("grid") 
    .Deferred() // Add this to your script 
    ..... 

그런 다음 페이지 하단에 스크립트를 이동하고, 바로 그 후, 라인을 넣어 :

@Html.Kendo().DeferredScripts(); 

가 지연 초기화가 몇 가지 단점이있을 수 있습니다. 자바 스크립트에서 위젯에 액세스 할 때 몇 가지 타이밍 문제가 발생할 수 있습니다. 이제는 초기화되며 나중에 FOUC 효과가 나타날 수도 있습니다.

+0

지연 기능은 제어 관련 스크립트 용입니다. 내가하는 일은 데이터 소스의 전송 설정에서'Promise'와'Hub'와 같은 시그널 관련 스크립트를 연기하는 것입니다. – Esen

+0

@UmutEsen 그래도 시도해 봤어? 지연된 컨트롤 초기화가 Signalr 초기화를 지연시킬 것으로 기대하기 때문에; 하지만 나 자신을 시도하지 않았습니다 (우리는 지연 기능을 사용하지만이 상황에서는 SignalR이 없습니다). – thmshd

+0

OK, 시도해 보면 효과가 있습니다. 나는 Kendo UI가 signalr 비트를 처리 할 것임을 알지 못했습니다. – Esen