2016-09-09 3 views
0

Мое приложение имеет Kendo TreeList и Kendo ComboBox. DataSource для TreeList также может использоваться для ComboBox. Если это возможно, это помешает мне выполнить один и тот же запрос дважды.Kendo Share DataSource Между ComboBox и TreeList

Это, по-видимому, сложнее, чем мой TreeList, используя транспорт для операций CRUD.

Пример моей общей DataSource:

 var sharedDataSource = new kendo.data.DataSource({ 
      transport: { 
       read: function (e) { 
        webService.getData(arg1, arg2).then(function (response) { 
         e.success(response.data); 
        }, function (response) { 
         console.log(response); 
        }); 
       } 
      } 
     }); 

     sharedDataSource.read(); 

Транспортная часть моего TreeList:

transport: { 
    read: function (e) { 
     e.success(sharedDataSource);//sharedDataSource has NO data here. That's the problem 
    } 
} 

ComboBox:

  $("#comboBox").width(250).kendoComboBox({ 
       dataTextField: "name", 
       dataValueField: "id", 
       dataSource: sharedDataSource//The comboBox is launched via a click after the page loads and DOES have data here 
      }); 

ответ

0

DataSource.read() это метод асинхронной. Данные еще не загружены, когда TreeList инициализируется, поэтому он будет пустым.

Использование read метода с Promise разрешения должно помочь:

sharedDataSource.read().then(function() { 
    // TreeList init 

    // ComboBox init 
}); 

Поскольку TreeList не имеет пейджинга или группировки, (предполагается, что вы загрузили все элементы дерево сразу), вы можете использовать DataSource.view() method для извлечения данных и избежать нежелательной удаленные запросы.

// TreeList and ComboBox transports 

transport: { 
    read: function (e) { 
     e.success(sharedDataSource.view()); 
    } 
} 

Dojo демо: http://dojo.telerik.com/@msagi/EnEnI (с поддельным удаленного вызова)

Смежные вопросы