Как обновить область из события k-select для загрузки файла? - PullRequest
0 голосов
/ 10 января 2019

Когда я читаю https://docs.telerik.com/kendo-ui/AngularJS/introduction, кажется, что для любого события, определенного в API для, я могу использовать префикс k-on- вместо префикса k-, чтобы установить событие таким образом, чтобы он работает внутри цикла дайджеста:

Настройка обработчиков через атрибут k-on

Вы также можете указать обработчики событий, используя атрибуты. Они требуют префикса k-on-.

<div ng-app="app" ng-controller="MyCtrl">
   <input kendo-date-picker k-on-change="onDateSelected(kendoEvent)" />
   <p ng-show="selected">A month was picked</p>
 </div>

...

Переменная kendoEvent определена в области видимости, и вы должны передать ее обработчику событий. Если вы используете атрибуты k-on-, вам не нужно вызывать $digest() в области видимости, поскольку ваши привязки позаботятся об этом.

Однако, когда я пытаюсь сделать это с событием file-upload select, мой обработчик никогда не запускается:

<input name="files"
  type="file"
  kendo-upload
  k-async="{ saveUrl: 'save', removeUrl: 'remove', autoUpload: true }"
  k-on-select="onSelect"
  />

Мой обработчик запускается, если вместо этого я передаю его как k-select, но иногда изменения, вносимые в $scope, не приводят к обновлению моего экрана.

Правильно ли я читаю документацию Kendo? Как мне обойти эту проблему?

1 Ответ

0 голосов
/ 10 января 2019

Атрибут k-on-select действительно работает. Однако k-on-select будет использовать Scope#$eval и выполнит его как выражение. Это соглашение AngularJS для событий. Так как я передал выражение, которое разрешает функцию, ничего не происходило каждый раз, когда мой k-on-select оценивался.

Чтобы вызвать функцию в выражении, вы должны использовать синтаксис вызова функции «function»(). В поддержке кендо AngularJS он передает информацию о событиях в переменную с именем kendoEvent (тогда как события, созданные в AngularJS, передают эту информацию в переменную с именем $event). Мой исправленный код выглядит так:

<input name="files"
  type="file"
  kendo-upload
  k-async="{ saveUrl: 'save', removeUrl: 'remove', autoUpload: true }"
  k-on-select="onSelect(kendoEvent)"
  />

Спасибо Лексу , который указал на это в своем комментарии !

...