Umbraco v8: изменение модели вызова пользовательского скрипта - PullRequest
3 голосов
/ 27 мая 2020

У меня есть плагин Umbraco, который буквально является ванильным. js файл, который позволяет мне получить некоторые JSON из службы, а затем он заполняет некоторые поля на текущей странице, например, выполнив:

var setTxt = function(id, val) {
  var txt = document.getElementById(id);
  if (txt && val != null && val != undefined) {
    return txt.value = val;
  };
};

Однако, когда я нажимаю «Сохранить», модель angular не сохраняет никаких изменений во входных данных - вероятно, потому, что не было запущено обнаружение изменений.

Я пробовал например, с полем 'publisher':

angular.element(document.querySelector("#publisher")).scope().apply()

, но я получаю сообщение об ошибке:

VM94421:95 TypeError: Cannot read property 'apply' of undefined

Я действительно не хочу застревать в angular 1 , мой vanilla js работает, мне просто нужно настроить umbraco на s coop, чтобы увеличить все значения, которые я установил в различных полях.

Q ) Как я могу это заставить?

ps - пожалуйста, не комментируйте, что это плохая практика, мне просто нужно выполнить эту работу.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

РЕДАКТИРОВАТЬ по плакату с вопросом: Оказывается, jQuery Lite уже включен, вы можете просто позвонить:

$('#' + id).trigger('input');

Оригинальный ответ ниже также работает:

Вы должны вызвать событие «input», чтобы angular узнал о ваших изменениях:

var setTxt = function(id, val) {
  var txt = document.getElementById(id);
  if (txt && val != null && val != undefined) {
    txt.value = val;
    raiseEvent(txt, 'input');

    return val;
  };
};

var raiseEvent = function(el, eventType) {
    var event = document.createEvent('Event');
    event.initEvent(eventType, true, true);
    el.dispatchEvent(event);
};

BTW, $ scope не имеет функции «применить» . Его имя - «$ apply». Также, насколько я понимаю, "scope. $ Appy (cb)" подберет изменения, которые применяются к переменной области, в вашем случае вы управляете напрямую с помощью элемента dom.

0 голосов
/ 28 мая 2020

Данные отладки должны быть включены , чтобы функция вызова angular.element(yourElement).scope() работала. Похоже, он включен по умолчанию.

...