Angular — привязка данных кендо

Я использую сетку кендо и имею столбец флажков со следующим шаблоном:

"<input class='gridCheckbox' id='gridCheckbox_#=name#' name='Selected' type='checkbox' ng-model='dataItem.checked'/>"

Кроме того, я также использую observableArray в качестве источника данных сетки. При щелчке по флажку данные в observableArray изменяются, как и ожидалось, но событие «изменение» не запускается. Вот как я определяю observableArray:

var obsArray = new kendo.data.ObservableArray(scope.gridData);
this.gridDataSource = new kendo.data.DataSource({
     data: obsArray
 });
 obsArray.bind("change", function (e) {
     console.log(e.action, e.field);
 });

«scope.gridData» — это исходная модель данных. Когда я устанавливаю флажок, observableArray изменяется, но не «scope.gridData». Чтобы изменить «scope.gridData», я хочу прослушать событие «change» и изменить «scope.gridData» вручную, но, как я уже сказал, событие «change» не запускается.

Любые предложения о том, что я делаю неправильно, и, возможно, есть лучшее решение.


person Eli C.    schedule 05.10.2014    source источник


Ответы (3)


Прочитать это

ваша проблема в том, что кендо использует копию вашего объекта области видимости

person Jason    schedule 20.03.2015

Я вручную добавил событие в свой флажок ввода (в нашем классе мы используем Angular, поэтому он был на ng-click="doSomething()", но, возможно, ваш просто click="doSomething" и записал обработку логического изменения вручную.

У нас также есть Kendo Observables, но мне ** повезло, потому что мы также используем материал Breeze JS, где мы можем выполнять обнаружение данных и обновлять сетку, как только данные распространяются в обратном направлении в нужное место, чтобы быть установленными как грязные. (сетка.dataSource.read();)

Если вам нужно полное значение строки, сделайте click="doSomething(this)", а затем зафиксируйте его как отправителя. Просто выполните отладку, и вы должны прикрепить элемент данных к отправителю.

person Jeremy    schedule 28.10.2014
comment
Дайте мне знать, если вы разберетесь с привязкой в ​​другом направлении - я не могу установить флажок, когда сетка впервые появляется... - person Jeremy; 28.10.2014

Это может помочь вам, и это неправильная цифра, но я сделал один пример, похожий на вашу проблему.

 var contentData = [
      { organization: 'Nihilent', os: 'Window' }
    ];

    var nihl = contentData[0];

    var viewModel = kendo.observable({
      gridSource: new kendo.contentData.DataSource({
        contentData: contentData
      })
    });

    kendo.bind($(document.body), viewModel);

    contentData.push({ organization: 'Dhuaan', os: 'Android' });

    nihl.set('os', 'iOS');
person Lokesh Kumar    schedule 11.08.2016