首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Frappe框架自动计算年龄和全名

Frappe框架自动计算年龄和全名
EN

Stack Overflow用户
提问于 2021-07-17 09:02:34
回答 1查看 268关注 0票数 1

日安,

我需要帮助来解决这个问题。

问题:

我正在尝试设置一个自定义脚本,它根据用户选择的年份来计算用户的年龄,并且当用户输入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

代码语言:javascript
复制
    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;
        }       
        
});
EN

回答 1

Stack Overflow用户

发布于 2021-07-24 23:00:25

代码中的两个问题

对于使用多个刷新事件的output

  • 使用return而不是set_value。由于两个密钥相同,最后一个密钥将生效。

使用此代码在refresh事件上设置fullnameage的值

代码语言:javascript
复制
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事件中更改fullnameage字段。如果您需要实时更改,可以使用以下代码。在brithdate上设置事件以更改age,在firstnamelastname上设置事件以更改fullname

代码语言:javascript
复制
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);
  }        
});

agefullname字段保留为readonly是一种很好的做法,因为它们是computed而不是用户输入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68416628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档