微信小程序5 - 数据驱动界面
2024-08-25 20:34:14
微信小程序不可以使用js直接控制界面元素.而是通过改变 this.data中的属性,同步到界面
这个问题可以克服,带来的就是和H5不一样的编码方式.JS中更多的是改变数据的逻辑,而不是获取某个View来改变属性值
例: 图片的error,加载默认图片
网页中 <img src="http://www.url/...png" onerror="this.src='默认图片'" />
微信小程序
<image src="{{imgurl}}"
binderror="showDefaultImage"
data-data_path="dest_country_group.item_list[{{index}}].img"
>
showDefaultImage 在BasePageOption中定义
data-data_path 定义当前图片在数据结构中的路径
BasePageOptionClass.prototype.showDefaultImage = function (e) {
var self = this;
var defaultImage = getApp().getProp("defaultImage");
var key = e.currentTarget.dataset.data_path;
var data ={};
data[key] = defaultImage
self.setData(data);
}
最终的效果类似
self.setData({
"dest_country_group.item_list[2].img" : "默认图片地址"
});
注意这种写法在JS中,并不能达到效果,而是setData方法进行了处理,做了key解析
有兴趣可以看下
// // 解析 key 为 data 内对象的路径字符串 微信解析key的代码, 所有 Object类型只能用 .
//数组类型才可以用 [], 否则报 only number 0-9 could inside []
function parsePath(e) {
for (var t = e.length, n = [], i = "", r = 0, o = !1, a = !1, s = 0; s < t; s++) {
var c = e[s];
if ("\\" === c) s + 1 < t && ("." === e[s + 1] || "[" === e[s + 1] || "]" === e[s + 1]) ? (i += e[s + 1], s++) : i += "\\";
else if ("." === c) i && (n.push(i), i = "");
else if ("[" === c) {
if (i && (n.push(i), i = ""), 0 === n.length) throw new Error("path can not start with []: " + e);
a = !0, o = !1
} else if ("]" === c) {
if (!o) throw new Error("must have number in []: " + e);
a = !1, n.push(r), r = 0
} else if (a) {
if (c < "0" || c > "9") throw new Error("only number 0-9 could inside []: " + e);
o = !0, r = 10 * r + c.charCodeAt(0) - 48
} else i += c
}
if (i && n.push(i), 0 === n.length) throw new Error("path can not be empty");
return n
}
最新文章
- adb install INSTALL_FAILED_ALREADY_EXISTS
- git资料图
- iOS emoji表情转码 或者判断
- 旋转轮子 UIActivityIndicatorView
- java 中小数点的处理
- select_tag in rails about selected not change and onchange()
- SSAS-many 2 many one simple sample
- 缓存插件 EHCache 对象缓存(Spring)
- .NET(C#)生成条形码
- 第二百九十八天 how can I 坚持
- QT-Demo-Colck-01
- 关于WebBrowser(浏览器)控件的调用
- 关于Image创建的内存管理
- ORA-16433 The database must be opened in read write mode故障解决
- [skill] ctags支持函数声明
- Django - models.py 应用
- Google Maps 基础
- Python(文件上传)
- C语言Socket编程(计算机网络作业)
- docker 开启远程