2014-11-14 95 views

回答

1

这里是一个工作示例:http://jsbin.com/fuqoke/1/

那么是什么问题。那么,Ember使用原型扩展。这种方法在不实现它们的浏览器中填充ECMAScript 5数组方法,为内置数组添加便利方法和属性,并使数组突变可观察。问题是,pnotify希望与正常的oldschool JavaScript数组一起工作。例如,这代码段它要遍历的数组:

... 
for (var i in options.buttons) { 
btn = options.buttons[i]; 
... 

此循环也将遍历由灰烬添加到阵列中的方法(例如addObjects,firstObject,....)

所以2种方法来解决这个问题:

1)你修改pnotify代码,并有利于它;),具有更稳健的实现来循环阵列

 ... 
     for (var i = 0; i < options.buttons.length; i++) { 
      btn = options.buttons[i]; 
     ... 

 ... 
     for (var i in options.buttons) { 
      if(options.buttons.hasOwnProperty(i)){ 
      btn = options.buttons[i]; 
      ... 

2)您禁用了Ember的原型扩展,我不建议使用。在这里你可以找到更多的信息:http://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/但它会给你带来很多麻烦。

简而言之,它肯定是pnotify中的一个bug。

+0

感谢您的详细解释! – Rudi 2014-11-19 19:47:00