日安,
我需要帮助来解决这个问题。
问题:
我正在尝试设置一个自定义脚本,它根据用户选择的年份来计算用户的年龄,并且当用户输入first_name,last_name,middle_name时,它应该反映在full_name上。
我尽了最大的努力去编码它,但是它不能工作,对于那些怀着金色的心阅读这篇文章的人,请帮助我改正我的代码。
补充说明:我使用的是Frappe框架,运行在Ubuntu 18.04.5 LTS上
有关在何处创建自定义代码和文档类型的其他信息(client_details)
截图:https://drive.google.com/drive/folders/1556W7AeeLfaJuC2Fu8RbnI7sSZc4hXQZ?usp=sharing
非常感谢<3
//我的自定义代码使用I'm writing on .js
frappe.ui.form.on('client_details', {
refresh: function(frm) {
var today = new Date();
var birthDate = new Date(brith_day);
var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
} return age;
}
refresh: function(frm){
var first_name = first_name
var last_name = last_name
var full_name = first_name.concat(last_name)
return full_name;
}
});发布于 2021-07-24 23:00:25
代码中的两个问题
对于使用多个刷新事件的output
return而不是set_value。由于两个密钥相同,最后一个密钥将生效。使用此代码在refresh事件上设置fullname和age的值
frappe.ui.form.on('client_details', {
refresh: function(frm) {
var today = new Date();
// this is how you get data from form
var birthDate = new Date(frm.doc.brithday);
var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
// use frm.set_value to set value of a field
frm.set_value('age', age);
// getting data from form
var first_name = frm.doc.firstname
var last_name = frm.doc.lastname
var full_name = firstname.concat(lastname)
// setting fullname in form
frm.set_value('fullname', full_name);
}
});上面的代码将在refresh事件中更改fullname和age字段。如果您需要实时更改,可以使用以下代码。在brithdate上设置事件以更改age,在firstname和lastname上设置事件以更改fullname。
frappe.ui.form.on('client_details', {
brithday: function(frm) {
var today = new Date();
// this is how you get data from form
var birthDate = new Date(frm.doc.brithday);
var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
// use frm.set_value to set value of a field
frm.set_value('age', age);
},
firstname: function(frm) {
// getting data from form
var first_name = frm.doc.firstname
var last_name = frm.doc.lastname
var full_name = firstname.concat(lastname)
// setting fullname in form
frm.set_value('fullname', full_name);
},
lastname: function(frm) {
// getting data from form
var first_name = frm.doc.firstname
var last_name = frm.doc.lastname
var full_name = firstname.concat(lastname)
// setting fullname in form
frm.set_value('fullname', full_name);
}
});将age和fullname字段保留为readonly是一种很好的做法,因为它们是computed而不是用户输入。
https://stackoverflow.com/questions/68416628
复制相似问题