Вручную изменить элементы данных в источнике данных

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

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)

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

Вот демонстрация.


person Snæbjørn    schedule 11.05.2015    source источник


Ответы (2)


Я думаю, что есть какая-то ошибка, из-за которой поле 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);
};
person Dion Dirza    schedule 11.05.2015

Мне удалось заставить его работать с помощью 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();
};
person Snæbjørn    schedule 11.05.2015