见BUG 描述
- 发布:2023-03-14 18:00
- 更新:2023-04-03 15:54
- 阅读:832
产品分类: uniapp/H5
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 11
HBuilderX类型: 正式
HBuilderX版本号: 3.7.6
浏览器平台: Edge
浏览器版本: 105.0.1343.53 (正式版本) (64 位)
项目创建方式: HBuilderX
操作步骤:
预期结果:
见BUG 描述
见BUG 描述
实际结果:
见BUG 描述
见BUG 描述
bug描述:
- binddata如果不重写,对于表单组件无效,比如在switch或picker等组件中无效。
- onFieldChange在输入框中有效,但在switch或picker等组件中无效。
- 复现步骤见下方评论区。
- 给uni-forms label-width 属性
- picker 的问题没太看明白
- binddata或onFieldChange 只能在支持 v-model 的组件上生效 ,目前原则是 uni-forms 内部不修改页面用户的数据,所以需要 用户双向绑定 model 的值,使其发生变化后,组件做出对应的反应。 以上, switch 等组件不会生效,需要重写 binddata 方法使其 formData 发生变化,主动触发组件校验等功能
-
易者 (作者)
谢谢回复。
给uni-forms label-width 属性,这个我明白,我的意思是,如果uni-forms-item组件源代码中的label-width把注释中的80直接写入,那么在页面中使用uni-forms-item组件的时候,无须再使用label-width属性,除非有其它尺寸需求。这样能省很多事。
picker举个例子,<picker>abc</picker>,如果不写入abc,那么picker就不显示值,但以前默认显示placeholder的属性值或者v-model的属性值。另外就是当前最新版只要用了picker组件,那么uni-forms-item的边框就消失,以前没这问题。
这一点解释明白了,也就是说,如果我要使用switch或picker之类的不支持 v-model的组件,就需要自定义binddata方法,但好像以前的版本不存在这个区别,都能通用binddata方法。
2023-03-20 15:58
-
回复 易者:
- 可以考虑增加
- picker 组件一直都没有 placeholder 和 v-model 来着,你是不是之前用了个其他的类picker的组件 ?边框问题我在看看
- 以前之所以没问题,是因为 uni-forms 的组件 model 是双向绑定的,所以binddata 生效,后来,因为组件内部会修改用户的值,造成用户有疑惑,所以取消了双向绑定的功能,所以现在需要用户自己修改 model 的值,组件内监听变化
2023-03-20 16:08
-
易者 (作者)
回复 DCloud_UNI_HT: 其它解释我清楚了,picker组件的placeholder 和 v-model这两个属性值,是schema2code自动生成的,我在本贴中给出了示例,这两个属性值不是我手动添加的,如果picker 组件一直都没有 placeholder 和 v-model,那可能需要优化schema2code功能了。谢谢!
2023-03-20 16:16
-
回复 DCloud_UNI_HT: 看到schema你自己设置了 ,如果用户指定组件按指定的生成,如果不指定且满足条件时会自动生成 uni-data-picker
2023-03-20 18:52
-
易者 (作者)
回复 DCloud_UNI_HT: 属性的使用与否倒是好说,但picker组件的显示值以及uni-forms-item的边框显示问题,不知道是什么情况。
2023-03-21 14:33
易者 (作者)
这是dbschema代码:
{
"bsonType": "object",
"required": [],
"permission": {
"read": true,
"create": true,
"update": true,
"delete": true
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"testswitch1": {
"bsonType": "bool",
"label": "测试默认",
"defaultValue": false
},
"testswitch2": {
"bsonType": "bool",
"label": "测试onFieldChange",
"defaultValue": false
},
"testpicker1": {
"bsonType": "string",
"label": "测试默认picker",
"description": "请选择开始时分",
"defaultValue": "11:00",
"componentForEdit": {
"name": "picker",
"props": {
"mode": "time",
"start": "00:00",
"end": "23:59"
}
}
},
"testpicker2": {
"bsonType": "string",
"label": "测试picker1",
"description": "请选择开始时分",
"defaultValue": "12:22",
"componentForEdit": {
"name": "picker",
"props": {
"mode": "time",
"start": "00:00",
"end": "23:59"
}
}
}
}
}
用schema2code生成后,略加改动的源代码如下:
<template>
<view class="uni-container">
<uni-forms ref="form" :model="formData" validateTrigger="bind">
<uni-forms-item name="testswitch1" label="测试默认">
<switch @change="binddata('testswitch1', $event.detail.value)" :checked="formData.testswitch1"></switch>{{formData.testswitch1?'已开启':'已关闭'}}
</uni-forms-item>
<uni-forms-item ref="mytest1" name="testswitch2" label="测试onFieldChange">
<switch @change="(e)=>$refs.mytest1.onFieldChange($event.detail.value)" :checked="formData.testswitch2"></switch>{{formData.testswitch2?'已开启':'已关闭'}}
</uni-forms-item>
<uni-forms-item name="testpicker1" label="测试默认picker">
<picker mode="time" start="00:00" end="23:59" placeholder="请选择开始时分" @change="binddata('testpicker1', $event.detail.value)" v-model="formData.testpicker1"></picker>
</uni-forms-item>
<uni-forms-item ref="mytest2" name="testpicker2" label="测试picker1">
<picker mode="time" start="00:00" end="23:59" placeholder="请选择开始时分" @change="(e)=>$refs.mytest2.onFieldChange($event.detail.value)" v-model="formData.testpicker2">testtext{{formData.testpicker2}}</picker>
</uni-forms-item>
<view class="uni-button-group">
<button type="primary" class="uni-button" style="width: 100px;" @click="submit">提交</button>
<navigator open-type="navigateBack" style="margin-left: 15px;">
<button class="uni-button" style="width: 100px;">返回</button>
</navigator>
</view>
</uni-forms>
</view>
</template>
页面效果如下图:
组件本身有两个问题:第一:表格左侧的标题宽度被挤压到下一行,如果把源代码中的默认值80写入就正常,但没写入。第二:picker组件须在开始标签和结束标签之间写入值才能显示,而且无论是否显示值,表格边框都不显示,这个问题以前没有。
另外就是组件方法binddata和onFieldChange无效,在页面中点击组件多次,值都不变。
HX3.7.3和uni-admin2.3.5都是当前最新版。上述问题vue2和vue3都一样。
易者 (作者)
放在下方的回复中,请移步,谢谢!
2023-03-15 17:36
易者 (作者)
人呢?
2023-03-18 13:54