Umbraco v8:自定义脚本调用模型更改

Umbraco v8: custom script call model change

我有一个 Umbraco 插件,它实际上是一个 vanilla .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

我真的不想陷入 angular1,我的 vanilla js 一切正常,我只需要让 umbraco 来收集所有我在各个字段上设置的值。

Q) 我怎样才能强制执行此操作?

p.s。 - 请不要评论这是不好的做法,我只需要完成这项工作。

Debug Data must be enabled enabled,以便调用 angular.element(yourElement).scope() 的功能正常工作。看起来它默认启用。

问题发布者编辑: 事实证明,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);
};

顺便说一句,$scope 没有 "apply" 函数。它的名字是“$apply”。据我所知,"scope.$appy(cb)" 将获取应用于范围变量的更改,在您的情况下,您直接使用 dom 元素进行操作。