mui picker 非级联选择器

本文介绍如何在MUI的picker组件中增加非级联选择功能,通过源码改造实现类似年龄段的选择需求,如18-30岁范围。文章详细展示了修改步骤,包括添加新选项noLink,并调整数据填充规则。
MUI 提供的 picker(选择器),默认支持了单个、多个。但对于多个,只能是 "级联"。
项目中有需求,类似年龄段的选择:18-30,不是级联,所以就看了下源码改造了下:

找到 mui.poppicker.js,init() 函数最后,添加一个新选项:noLink,代表 '是否非联动'(大概:82行)

			// 1.是否非联动
			self.noLink = self.options.noLink || false;
		},
		_createPicker: function() {
			var self = this;
			var layer = self.options.layer || 1;
			var width = (100 / layer) + '%';
			self.pickers = [];
			for (var i = 1; i <= layer; i++) {
				var pickerElement = $.dom(pickerBuffer)[0];
				pickerElement.style.width = width;
				self.body.appendChild(pickerElement);
				var picker = $(pickerElement).picker();
				self.pickers.push(picker);
				pickerElement.addEventListener('change', function(event) {
					// 2.如果非联动,停止
					if(self.noLink) return false;
					var nextPickerElement = this.nextSibling;
					if (nextPickerElement && nextPickerElement.picker) {
						var eventData = event.detail || {};
						var preItem = eventData.item || {};
						nextPickerElement.picker.setItems(preItem.children);
					}
				}, false);
			}
		},
		//填充数据
		setData: function(data) {
			var self = this;
			data = data || [];
			// 3.非联动,改变填充数据规则
			if(self.noLink){
				for(var i = 0, length = self.pickers.length; i < length; i++){
					self.pickers[i].setItems(data[i]);
				}
			}else{
				self.pickers[0].setItems(data);
			}
		},

修改共 3 处,上面都有标注。

使用:
	1.非级联数据格式(有几个滑动列表,就传递一个包含几个列表的数组,数组中的每个列表,也是一个由对象组成的数组):
		var noLinkData = [[
			{value: 11, text: 11}, {value: 12, text: 12}, ...
		],[
			{value: 11, text: 11}, {value: 12, text: 12}, ...
		]];

	2.实例化时,传递 noLink 为 true
		var picker = new $.PopPicker({
			layer: 2,
			noLink: true,
		});
		picker.setData(noLinkData);

缺点:
	改动了 MUI 的源码,如果要更新源码,得实时记得重新添加这个改动!!!


 

### 关于 MUI Picker 的使用方法 MUI 提供了一个简单易用的选择器组件 `Picker`,可以用于创建弹出式的选项选择界面。以下是其基本使用方法以及示例代码。 #### 导入必要的 JS 和 CSS 文件 为了正常使用 MUI Picker 功能,需确保页面中已正确引入所需的 JavaScript 和样式文件[^2]: ```html <script src="js/mui.min.js"></script> <link href="css/mui.min.css" rel="stylesheet" /> <link href="css/mui.picker.css" rel="stylesheet" /> <link href="css/mui.poppicker.css" rel="stylesheet" /> ``` #### 创建并初始化 PopPicker 实例 通过调用 `new mui.PopPicker()` 方法来创建一个新的选择器实例,并设置数据源和回调函数处理选中的项[^1]。 以下是一个完整的示例代码片段展示如何配置和显示一个简单的单列选择器: ```javascript var picker = new mui.PopPicker(); picker.setData([{ value: 'zz', text: '智子' }]); picker.show(function (selectItems) { console.log(selectItems[0].text); // 输出:智子 console.log(selectItems[0].value); // 输出:zz }); ``` 此段代码实现了如下功能: - 使用 `setData` 方法定义可供用户选择的数据列表。 - 调用 `show` 方法触发选择器弹窗的显示。 - 当用户完成选择后,会执行传给 `show` 方法的回调函数,在其中可以通过参数获取到被选中的条目及其对应的值与描述文字。 #### 多列联动选择器 如果需要更复杂的功能比如多级联动态加载,则可以在初始化时指定多个数组作为不同列的内容来源,并监听某些特定事件来自定义行为逻辑。不过这超出了基础使用的范畴,这里不再展开说明。 对于更加复杂的移动端场景需求,还可以考虑第三方库如 **react-mobile-picker**[^3] ,它提供了仿 iOS 风格的选择框效果,适合构建跨平台应用或者追求更高定制化程度的应用程序。 另外值得注意的是,在实际项目开发过程中可能会遇到兼容性问题特别是针对不同的操作系统版本情况下的表现差异。例如有开发者反馈过 uni-app 平台下 datetime 类型插件存在 IOS 设备上的适配难题[^5] 。因此建议测试阶段充分覆盖目标受众群体所使用的各类终端设备环境以保证最终产品的用户体验质量达到预期标准。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值