Dojo –Dialog在组件中传值

2023-11-26 18:58
文章标签 组件 dojo dialog 中传值

本文主要是介绍Dojo –Dialog在组件中传值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  Dialog是所有开发人员都会使用到的一个对话框,由于它的常用性,很多开发平台都对其进行了封装,通过MessageBox或者Alert就能弹出来.再捕获commandOk中的值,来执行相应的事件.没错,Dialog就是这么简单,Dojo中的Dialog是否也是如此的简单呢?下面我们就以我新近做的Dialog为例进行说明.

  下面,我们先看现象:单击“保存为搜索模板”,弹出“保存搜索条件”对话框.

          

 



  由于“保存为搜索模板”为动态创建的,这里我就不再将此部分的页面代码Show出来,单击“保存为搜索模板”,触发“onSave()”事件,如下:

onSave : function(event){

       this.logger.debug("onSave");

       this._saveSearchCondition(event.payload);

    }

  为了实现代码的重用性,及降低代码的耦合性,在onSave中调用this._saveSearchCondition(event.payload)方法,选用this.method方法,是避免Form中会有多个_saveSearchConditon()方法混淆使用,this限制了方法的作用域为当前的widget.

_saveSearchCondition: function(payload){

       this.logger.debug("_saveSearchCondition");

      

       var generalCallback =function(result) {

            this.logger.debug("Success");

            console.dir(['data',result ]);           

        };

 

        var cancelCallback =function() {

            this.logger.debug("cancelCallback");

        };

      

       ecmwdgt.getBean("saveSearchConditionDialog",{

          model : ecmwdgt.getBean("searchTemplateModel"),

          payload : payload,

          callbacks:{

             "ok":dojo.hitch(this, generalCallback),

             "cancel": dojo.hitch(this, cancelCallback)

          }

       }).show();

    }

  注解:ecmwdgt.getBean().show()是加载了需要显示的Dialog,此Dialog对应的是创建该Dialog(saveSearchConditonDialog)的js文件,由json数据进行绑定.然后由saveSearchConditonDialog.js加载saveSearchConditonDialog.html文件.

  model :ecmwdgt.getBean("searchTemplateModel"),有两个作用,一个是对service中的数据持久化,另一方面就是页面中暂存数据.如下为searchTemplateModel.js文件:

save : function(/*Object*/ postPayLoad, /* Function */callback, /* Function */errorback) {

       this._invokeService("saveSearchCondition", postPayLoad, callback, errorback);

    }

  callbacks:分别对应Dialog页面“是”和 “否”的返回值,当我们操作成功,就会从前台界面返回成功,就会执行generalCallback()方法,注意这里的方法并不是Dialog时间执行的方法,而是事件执行成功之后,返回的方法.

  在上面的方法执行完之后,就会加载saveSearchConditionDialog.js文件,创建Dialog,加载saveSearchConditionDialog.html,在页面中显示出来.下面是saveSearchConditionDialog.js与saveSearchConditionDialog.html的关键源码.

 dojo.require("com.ibm.ecm.nuclear.common.dialog.dijit._CommandDialog");

dojo.require("dojo.string");

 

dojo.declare("com.ibm.ecm.nuclear.common.dialog.SaveSearchConditionDialog",[com.ibm.ecm.nuclear.common.dialog.dijit._CommandDialog],{

   templateString:dojo.cache("com.ibm.ecm.nuclear.common.dialog","templates/SaveSearchConditionDialog.html"),

   widgetsInTemplate : true,

   title : null,

  

   preamble:function(args){

//    this.bundle = args.bundle || ecmwdgt.getCommandResourceBundle("SaveSearchConditionDialog");    

      this.resourceBundle = ecmwdgt.getCommandResourceBundle("SaveSearchConditionDialog");

   },

 

   constructor: function(args){

      this.title = args.title ||this.resourceBundle.dialogTitle;

      dojo.mixin(args,

            {

                buttons:[

                  { name:"ok", label:this._commonResourceBundle.YES},

                  { name:"cancel", label:this._commonResourceBundle.NO}

               ],

                commandsCallback:{

                   ok:dojo.hitch(this,this._onSaveSearchCondition),

                   cancel:dojo.hitch(this,this._onCancel)

                }

            }

         );

      },

  

   postCreate: function() {

      this.inherited(arguments);

      var searchTitle =null;

      searchTitle = this.inputBox.get("value");

      console.dir(["this", this]);

   },

 

   _onSaveSearchCondition:function(){

      this.logger.debug("common.dialog.SaveSearchConditionDialog._onSaveSearchCondition");

      console.dir(["_onSaveSearchCondition this",this, this.model, this.payload]);

      var searchTitle =this.inputBox.get("value");

      if(this.model &&this.payload && searchTitle){

         this.logger.debug("Model Exists!");

         this.payload.searchTemplateName = searchTitle;

         this.model.save(this.payload, dojo.hitch(this,function(result) {         

            return this._execute("ok");

         }), dojo.hitch(this,function(err) {

            this.onCancel();

            this._showErrorMessage(err);

            return err;

         }));

      }

      //return searchTitle;

   },

  

  

   _execute: function(name) {

       if (this.callbacks &&this.callbacks[name])

            return this.callbacks[name](this.inputBox.get("value"),this);

    },

     

   _onCancel: function(){

      this.logger.debug("_onCancel");

      console.dir(["this", this]);

      this._execute("cancel");

   },

  

   destroy: function(){

      this.inherited(arguments);

   },

  

   _eoc_: null

  

});

  注解:刚才在上面callbacks进行了详细的解释,在这里_execute()方法将title方法返回给后台(并非是真正的后台),在contentList页面中取得返回值,这一步是取得返回值的关键.  

Constructor为当前类的构造函数,它与我们平时创建的构造函数一样,只不过我们在这里构造了两个绑定值的Button使用.

saveSearchConditionDialog.html

<div class="dijitDialog ecmSaveSearchConditionDialog" data-dojo-props='tabindex:"-1",waiRole:"dialog",waiState:"labelledby-${id}_title"'>

   <!-- 标题 -->

   <div data-dojo-attach-point="titleBar" class="dijitDialogTitleBar">

      <span data-dojo-attach-point="titleNode" class="dijitDialogTitle"

         id="${id}_title">${title}</span>

      <span

         data-dojo-attach-point="closeButtonNode" class="dijitDialogCloseIcon"

         data-dojo-attach-event="onclick:onCancel"

         data-dojo-props='id:"${id}_closeButton",title:"${_commonResourceBundle.Close}"'>

         <span data-dojo-attach-point="closeText" class="closeText" data-dojo-props='title:"${_commonResourceBundle.Close}"'>x</span>      

      </span>

   </div>

   <!-- 内容区  -->

   <div data-dojo-attach-point="containerNode">

      <div data-dojo-type="dijit.layout.ContentPane" class="dijitDialogPaneContent ContentPane">

         <div class="ecmDialogSaveSearchCondition">

            <label>标题:</label>

            <input data-dojo-type="dijit.form.TextBox" type="text" data-dojo-attach-point="inputBox" value=""trim="true" required="true">

         </div>  

      </div>

   </div>

  

   <div data-dojo-attach-point="buttonsPanelNode"></div>

</div>

 

  注:此部分的Dialog实现方式与本系统所需的架构有关,在一般的Dialog中直接在其对应的页面中响应数据,操作比较简单。本文谨为自己学习使用,初学者请勿随意模仿,以免进入学习的误区。


这篇关于Dojo –Dialog在组件中传值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426172

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

JavaEE应用的组件

1、表现层组件:主要负责收集用户输入数据,或者向客户显示系统状态。最常用的表现层技术是JSP,但JSP并不是唯一的表现层技术。 2、控制器组件:对于JavaEE的MVC框架而言,框架提供一个前端核心控制器,而核心控制器负责拦截用户请求,并将用户请求转发给用户实现的控制器组件。而这些用户实现的控制器则负责处理调用业务逻辑方法,处理用户请求。 3、业务逻辑组件:是系统的核心组件,实现系统的业务逻辑

17 通过ref代替DOM用来获取元素和组件的引用

重点 ref :官网给出的解释是: ref: 用于注册对元素或子组件的引用。引用将在父组件的$refs 对象下注册。如果在普通DOM元素上使用,则引用将是该元素;如果在子组件上使用,则引用将是组件实例: <!-- vm.$refs.p will be the DOM node --><p ref="p">hello</p><!-- vm.$refs.child will be the c

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><

15 组件的切换和对组件的data的使用

划重点 a 标签的使用事件修饰符组件的定义组件的切换:登录 / 注册 泡椒鱼头 :微辣 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-