2015-05-11 3 views
1

У меня есть следующий источник данных с данными, установленными в массив.Вручную изменить элементы данных в источнике данных

var dataArray = [ 
    { Id: 1, Name: "RootA", ParentId: null }, 
    { Id: 2, Name: "ChildA", ParentId: 1 }, 
    { Id: 3, Name: "RootB", ParentId: null }, 
    { Id: 4, Name: "ChildB", ParentId: 3 }, 
    { Id: 5, Name: "RootC", ParentId: null } 
]; 

var treeListDataSource = new kendo.data.TreeListDataSource({ 
    data: dataArray, 
    schema: { 
     model: { 
      id: "Id", 
      fields: { 
       parentId: { field: "ParentId", type: "number", nullable: true }, 
       Id: { field: "Id", type: "number" } 
      } 
     } 
    } 
}); 

Это работает.

Теперь я хочу, чтобы изменить элементы в DataArray на:

var newData = [ 
    { Id: 6, Name: "RootD", ParentId: null }, 
    { Id: 7, Name: "ChildD", ParentId: 6 }, 
    { Id: 8, Name: "RootE", ParentId: null } 
]; 

Я пробовал:

  • Просто установить его: dataArray = newData;
  • Настройка с помощью метода data() в кендо источника данных: treeListDataSource.data(newData)

Но gri d не отображает новые значения. Вместо этого просто говорится «нет записей».

Адрес demo.

ответ

0

мне удалось заставить его работать, используя transport API. http://dojo.telerik.com/OBUSU/4

var treeListDataSource = new kendo.data.TreeListDataSource({ 
    transport: { 
     read: function (options) { 
      var data = dataArray; 
      options.success(data); 
     } 
    }, 
    ... 
}); 

function change() { 
    var newData = [ 
     { Id: 6, Name: "RootD", ParentId: null }, 
     { Id: 7, Name: "ChildD", ParentId: 6 }, 
     { Id: 8, Name: "RootE", ParentId: null } 
    ]; 
    dataArray = newData; 
    treeListDataSource.read(); 
}; 
0

Я думаю, что есть какая-то ошибка, из-за которой поле parentId не будет искать до измененного поля ParentId после инициации. Вы можете решить эту проблему, создав общее определение datasource.

Ваш код должен выглядеть так:

<kendo-treelist id="treelist" k-options="treelistOptions"></kendo-treelist> 

$scope.change = function() { 
    var treelist = $("#treelist").data().kendoTreeList; 
    var newData = [ 
    { Id: 6, Name: "RootD", ParentId: null }, 
    { Id: 7, Name: "ChildD", ParentId: 6 }, 
    { Id: 8, Name: "RootE", ParentId: null } 
    ]; 
    var newDs = new kendo.data.TreeListDataSource({ 
    data: newData, 
    schema: { 
     model: { 
     id: "Id", 
     fields: { 
      parentId: { field: "ParentId", nullable: true }, 
      Id: { field: "Id", type: "number" } 
     } 
     } 
    } 
    }); 
    treelist.setDataSource(newDs); 
};