簡體   English   中英

Umbraco v8:自定義腳本調用 model 更改

[英]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 model 沒有保存對輸入的任何更改 - 可能是因為沒有觸發更改檢測。

我已經嘗試過使用“發布者”字段:

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

但我得到了錯誤:

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

我真的不想陷入 angular 1 ,我的香草 js 一切正常,我只需要讓 umbraco 舀出我在各個領域設置的所有值。

問)我該如何強制?

ps - 請不要評論這是不好的做法,我只需要完成這項工作。

通過問題海報編輯:原來 jQuery Lite 已經包含在內,您可以致電:

$('#' + id).trigger('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 沒有“應用”function。 它的名字是“$apply”。 此外,據我了解,“scope.$appy(cb)”將獲取應用於 scope 變量的更改,在您的情況下,您可以直接使用 dom 元素進行操作。

必須啟用 Debug Data 才能使調用angular.element(yourElement).scope()的功能正常工作。 看起來它默認啟用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM