由于抽签HT For Web ComboBox下拉框组件

时间:2022-09-10 17:32:49

传统HTML5的下拉框select仅仅能实现简单的文字下拉列表,而HT
for Web
通用组件中ComboBox不仅可以实现传统HTML5下拉框效果,并且可以在文本框和下拉列表中加入自己定义的小图标,让整个组件看起来更直观。今天我就怎样制定ComboBox自己定义下拉框做一番探讨。

首先我们先来目睹下效果:

由于抽签HT For Web ComboBox下拉框组件 由于抽签HT For Web ComboBox下拉框组件

看起来跟普通的ComboBox好像也没什么特殊的,是的,依照规范的ComboBox设计,全然能够实现相同的效果,可是今天的主要任务并非讨论有多少实现方案,今天的首要任务是介绍HT
for Web的ComboBox自己定义下拉列表的使用方法。

那么接下来就開始详细的方案介绍,废话不多说,上代码:

function createGradientComboBox(dataModel){
var sm = dataModel.sm(),
gradientComboBox = new ht.widget.ComboBox(),
gradients = ['linear.southwest','linear.southeast','linear.northwest','linear.northeast',
'linear.north','linear.south','linear.west','linear.east',
'radial.center','radial.southwest','radial.southeast','radial.northwest','radial.northeast',
'radial.north','radial.south','radial.west','radial.east',
'spread.horizontal','spread.vertical','spread.diagonal','spread.antidiagonal',
'spread.north','spread.south','spread.west','spread.east'],
gradientImages = [],
indent = gradientComboBox.getIndent(),
height = 18,
padding = 2; gradients.forEach(function (gradient) {
gradientImages[gradient] = {
width: indent,
height: height,
comps: [
{
type: 'rect',
rect: [padding, padding, indent - 2 * padding, height - 2 * padding],
background: 'red',
gradient: gradient,
gradientColor: 'white'
}
]
};
}); gradientComboBox.setValues(gradients);
gradientComboBox.setValue('linear.southwest');
gradientComboBox.setWidth(90);
gradientComboBox.setDropDownWidth(140);
gradientComboBox.drawValue = function(g, value, selected, x, y, w, h){
var self = this,
indent = self.getIndent(),
label = self.toLabel(value),
icon = gradientImages[value]; if(icon){
ht.Default.drawCenterImage(g, icon, x+indent/2, y+h/2);
x += indent;
}
if(label){
ht.Default.drawText(g, label, self.getLabelFont(value, selected), self.getLabelColor(value, selected), x, y, 0, h);
}
}; gradientComboBox.onValueChanged = function(oldValue, newValue){
onComboBoxValueChanged(dataModel, oldValue, newValue, 'shape.gradient', this);
};
return gradientComboBox;
}

这是背景渐变效果列表的详细构建代码,我来描写叙述下详细的设计思路:

  1. HT
    for Web
    支持的渐变效果组合起来放在一个叫gradient的数组变量中。
  2. 通过遍历gradient数组来动态创建gradient相应的矢量图。并将矢量图存放在gradientImages的数组变量中。
  3. 将gradient文本值作为ComboBox的value,并设置ComboBox的相关參数;
  4. 通过重载ComboBox的drawValue方法来实现自己定义下拉列表;
  5. 在drawValue方法中须要传入的參数有:g(画笔),value(相应comboBox中values),selected(是否被选中),x,y(画笔的事实上绘制坐标x,y),w,h(画笔绘制的宽高w。h);
  6. 通过ht.Default.drawCenterImage()方法将数量图元绘制到指定位置。
  7. 通过ht.Default.drawText()方法将要显示的的值绘制到指定的位置;
  8. 最后重载ComboBox的onValueChanged()方法来监听ComboBox的属性变化,并依照要求做相应的业务处理。

总体思路就是这样子的。对应的图形ComboBox组件也是如此的设计思路,接下来我们来了解下ComboBox和HT
for Web
网络拓扑图组件GraphView的联动效果实现吧。

由于抽签HT For Web ComboBox下拉框组件由于抽签HT For Web ComboBox下拉框组件

通过两张图的对照,我相信大家都可以感受到变化吧。

前一张是GraphView的初始状态,后一张是通过选中图元后改动gradient渐变选择框后的效果,我们来看看详细的代码实现,GraphView和Node的创建我就不在这多说了。直接上事件处理的详细实现代码:

function onComboBoxValueChanged(dataModel, oldValue, newValue, style, scope){
var sm = dataModel.sm();
if(sm.size() === 0){
dataModel.each(function(data){
data.setStyle(style, newValue);
}, scope);
}else{
sm.each(function(data){
data.setStyle(style, newValue);
}, scope);
}
}

代码非常easy,做的事情也非常easy。接下来我们就来分析下代码的详细实现:

  1. 方法的入參:dataModel(数据容器),oldValue(comboBox老值),
    newValue(comboBox新值),
    style(要改变的样式名称), scope(方法调用者)。
  2. 从dataModel中获取对应的selectionModel
    sm。
  3. 依据sm.size()来推断在GraphView中选取了多少个data,假设一个都没选中,则改动dataModel中的全部data的属性;假设有选中的data。则仅仅改动所选中data的属性。

到此自绘制HTfor Web ComboBox下拉框组件的介绍就结束了。HT for Web通用组件的灵活性和易用性还不止如此,在本文中涉及到矢量、ComboBox、几个关键知识点的拓扑结构部件等。在可能的文章会做详细,欢迎大家关注。

由于抽签HT For Web ComboBox下拉框组件的更多相关文章

  1. 自绘制HT For Web ComboBox下拉框组件

    传统的HTML5的下拉框select只能实现简单的文字下拉列表,而HTforWeb通用组件中ComboBox不仅能够实现传统HTML5下拉框效果,而且可以在文本框和下拉列表中添加自定义的小图标,让整个 ...

  2. 从后台绑定数据到ligerui 的comboBox下拉框组件

    这次来记录一下ligerUI的comboBox下拉框组件,ligerUI的API里也有相关描写叙述,上面都是前台写死数据,然后显示在组件中,我这次要说的是将后台的数据绑定到下拉框组件中,废话不多说. ...

  3. paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结

    paip.web数据绑定 下拉框的api设计 选择框 uapi  python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...

  4. 关于easyui combobox下拉框实现多选框的实现

    好长时间没有更博了,一是因为最近真的比较忙,二是因为自己是真的偷懒了,哈哈 好啦,这篇博客主要是总结一些关于easyui combobox下拉框实现多选框的实现,包括前台界面的展示,和后台对数据的获取 ...

  5. winform c#绑定combobox下拉框 年度代码。

    winform c#绑定combobox下拉框 年度代码. comboBox1.Items.AddRange("});//邦定数据 comboBox1.Text = DateTime.Now ...

  6. sencha combobox下拉框不用jsonstore,直接使用字符串数组做数据源

    combobox下拉框的store除了可以选择一个jsonstore来加载数据,还可以直接使用符串Array做数据源. { xtype: 'combobox', fieldLabel: 'Label' ...

  7. easyui的combobox下拉框初始化默认值以及保持该值一直显示的方法

    easyui的combobox下拉框默认初始值是空,下面是实现从远程加载数据之后初始化默认值,以及让该值一直排在下拉框的最顶部的方式. 目前的需求是需要在初始化的时候添加"全部数据库&quo ...

  8. 快速设计ComboBox下拉框

    传统软件项目开发时,需要每个控件一个一个的来设计,同时需要在页面功能中对每个控件的属性进行判定处理,尤其是页面风格布局样式需要花去一大半的时间,并且后续要想修改是非常麻烦繁琐,这样就导致设计完成一个功 ...

  9. easyui combobox下拉框复制后再禁用,点击不会出现下拉框

    easyui combobox下拉框禁用,点击不会出现下拉框 需要做到,在给easyui combobox赋值后,再禁用easyui combobox 解决办法: $("#time-sele ...

随机推荐

  1. HDU 5701 中位数计数

    这题真的很恶心,做了一天,最后问学长,才懂题意是什么,原来我一直都没读懂题.这我真的就无语了,你的题意多两句话会死啊?你测试样例多两个例子就不行啊?真蛋疼,题意都不懂,还做个shi? 题里说的是区间, ...

  2. 如何让oracle的select强制走索

    大多数情况下,oracle数据库内置的查询优化策略还是很成功的,但偶尔也有糊涂的时候,即使有索引,也会做全表扫描,可以参考以下语句的写法,强制让select语句使用索引. (注意:走索引不一定是最优的 ...

  3. java新手笔记12 单例

    1.单例 package com.yfs.javase; public class Singleton { //private static final Singleton single = new ...

  4. FullCalendar 的学习笔记(二)

    下面是一个.NET webForm的具体列子 注意引用了artDialog 以及异步请求数据的json格式字符串 <html xmlns="http://www.w3.org/1999 ...

  5. 用&period;Net Core控制台模拟一个ASP&period;Net Core的管道模型

    在我的上几篇文章中降到了asp.net core的管道模型,为了更清楚地理解asp.net core的管道,再网上学习了.Net Core控制台应用程序对其的模拟,以加深映像,同时,供大家学习参考. ...

  6. oralce 的安装以及plsql的配置的html连接

    https://www.cnblogs.com/xkstudy/p/6400738.html

  7. Mac中selenium使用出现错误

    解决方案是: 首先通过brew 安装 $ brew install geckodriver 然后设置配置文件~/.bash_profile文件 export PATH=$PATH:/path/to/g ...

  8. 一个简单的springmvc例子 入门(1)

    一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了sprin ...

  9. 全网最全的Windows下Python2 &sol; Python3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)

    不多说,直接上干货! 建议,你用Anaconda2或Anaconda3. 见 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库( ...

  10. stdafx&period;h、stdafx&period;cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx&period;h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编

    sstdafx.h.stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要 ...