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 元素进行操作。
我有一个 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 元素进行操作。