然后去远足
然后去远足
  • 发布:2016-08-28 19:11
  • 更新:2016-08-28 19:11
  • 阅读:5856

解决MUI选择器组件抛出“picker.getSelectedItem is not a function”异常的问题

分类:MUI

【背景介绍】
  MUI 版本 3.3。
  在页面中使用了 Pop-Picker 组件(mui-picker)。

【问题阐述】
  当点击选择器的“确定”按钮时,页面上抛出如下异常:

Uncaught TypeError: picker.getSelectedItem is not a function at src bs/mui/mui.poppicker.js:117  

【解决方案】
  几经排查,发现当页面内引入的 js 中包含了对 Array 原型链方法扩充时,会抛出这个异常。
  定位到 mui.poppicker.js 第 112 行 getSelectedItems() 方法中,原先的:

for (var i in self.pickers) {  
    var picker = self.pickers[i];  
    items.push(picker.getSelectedItem() || {});  
}  

  修改为:

for (var i = 0, len = self.pickers.length; i < len; i++) {  
    var picker = self.pickers[i];  
    items.push(picker.getSelectedItem() || {});  
}  

  问题解决。

【后记】
  查找资料时发现 http://ask.dcloud.net.cn/question/14800 这样一个问题,题主应该是遇到了和我同样的错误。
  现在大多数开发者手头都会有几个工具库来扩充原型链方法, String.prototype.trim = function(); 这种经典的方法就不提了,为了应对低版本浏览器,对 Array.prototype.forEach = function(); 这类 ES5 常用方法也有必要做 polyfil,我本人遇到这个问题是因为扩充了 Array.prototype.remove = function();
  Javascript 里 for in 遍历因为原型链的缘故本来就有潜在的坑,不如老老实实写 for 循环,必要时还需要使用 hasOwnProperty() 辅助判断,也希望大家引以为戒吧。

6 关注 分享
Android_XR 大男人主义 木果子 1021738078@qq.com VanJay 风小舞

要回复文章请先登录注册

风小舞

风小舞

感谢大佬帮助, 我也是发现mui的poppicker里面一旦扩展过数组的原型链分分钟报错
2018-02-01 10:15
124559818@qq.com

124559818@qq.com

谢谢帮助。
2017-06-01 17:50
VanJay

VanJay

感谢分享。
2017-05-09 17:52
Allen梅川酷子

Allen梅川酷子

感谢感谢
2017-04-22 16:04
leeistrue

leeistrue

感谢帮助
2017-03-22 11:30
大男人主义

大男人主义

感谢帮助
2017-03-20 16:45