소스 검색

fix: properly queue tasks in `frappe.model.trigger` (#14260)

version-14
Sagar Vora 3 년 전
committed by GitHub
부모
커밋
778ab5919c
No known key found for this signature in database GPG 키 ID: 4AEE18F83AFDEB23
2개의 변경된 파일18개의 추가작업 그리고 19개의 파일을 삭제
  1. +2
    -3
      frappe/public/js/frappe/form/form.js
  2. +16
    -16
      frappe/public/js/frappe/model/model.js

+ 2
- 3
frappe/public/js/frappe/form/form.js 파일 보기

@@ -181,8 +181,7 @@ frappe.ui.form.Form = class FrappeForm {

me.layout.refresh_dependency();
me.layout.refresh_sections();
let object = me.script_manager.trigger(fieldname, doc.doctype, doc.name);
return object;
return me.script_manager.trigger(fieldname, doc.doctype, doc.name);
}
});

@@ -197,7 +196,7 @@ frappe.ui.form.Form = class FrappeForm {
if(doc.parent===me.docname && doc.parentfield===df.fieldname) {
me.dirty();
me.fields_dict[df.fieldname].grid.set_value(fieldname, value, doc);
me.script_manager.trigger(fieldname, doc.doctype, doc.name);
return me.script_manager.trigger(fieldname, doc.doctype, doc.name);
}
});
});


+ 16
- 16
frappe/public/js/frappe/model/model.js 파일 보기

@@ -465,31 +465,31 @@ $.extend(frappe.model, {
},

trigger: function(fieldname, value, doc) {
let tasks = [];
var runner = function(events, event_doc) {
$.each(events || [], function(i, fn) {
if(fn) {
let _promise = fn(fieldname, value, event_doc || doc);
const tasks = [];

function enqueue_events(events) {
if (!events) return;

for (const fn of events) {
if (!fn) continue;

tasks.push(() => {
const return_value = fn(fieldname, value, doc);

// if the trigger returns a promise, return it,
// or use the default promise frappe.after_ajax
if (_promise && _promise.then) {
return _promise;
if (return_value && return_value.then) {
return return_value;
} else {
return frappe.after_server_call();
}
}
});
});
}
};

if(frappe.model.events[doc.doctype]) {
tasks.push(() => {
return runner(frappe.model.events[doc.doctype][fieldname]);
});

tasks.push(() => {
return runner(frappe.model.events[doc.doctype]['*']);
});
enqueue_events(frappe.model.events[doc.doctype][fieldname]);
enqueue_events(frappe.model.events[doc.doctype]['*']);
}

return frappe.run_serially(tasks);


불러오는 중...
취소
저장