微信小程序不可以使用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
}
 

 
 

最新文章

  1. adb install INSTALL_FAILED_ALREADY_EXISTS
  2. git资料图
  3. iOS emoji表情转码 或者判断
  4. 旋转轮子 UIActivityIndicatorView
  5. java 中小数点的处理
  6. select_tag in rails about selected not change and onchange()
  7. SSAS-many 2 many one simple sample
  8. 缓存插件 EHCache 对象缓存(Spring)
  9. .NET(C#)生成条形码
  10. 第二百九十八天 how can I 坚持
  11. QT-Demo-Colck-01
  12. 关于WebBrowser(浏览器)控件的调用
  13. 关于Image创建的内存管理
  14. ORA-16433 The database must be opened in read write mode故障解决
  15. [skill] ctags支持函数声明
  16. Django - models.py 应用
  17. Google Maps 基础
  18. Python(文件上传)
  19. C语言Socket编程(计算机网络作业)
  20. docker 开启远程

热门文章

  1. (转)Akka学习笔记
  2. 从0x00到0xFF的含义以及二进制到10进制的转换(转)
  3. HTML+JavaScript实现链式运动特效
  4. Android 如何添加一个新的时区
  5. 搭建 SMTP mail
  6. Python vs Ruby: 谁是最好的 web 开发语言?
  7. fscanf和feof的组合使用
  8. timedelta
  9. oracle 某一字段取反
  10. mongodb - Replication Set成员维护