2010-12-01 72 views
1

我在玩html5 LeanBack Player,它在页面上只有它的javascritpts时效果很好。但是,如果我添加这些JavaScript文件到Rails 3项目,然后我得到错误的Leanback播放器的JavaScript文件:两个javascript文件的冲突

Uncaught TypeError: Object function each(iterator, context) { 
    var index = 0; 
    try { 
    this._each(function(value) { 
     iterator.call(context, value, index++); 
    }); 
    } catch (e) { 
    if (e != $break) throw e; 
    } 
    return this; 
} has no method ‘split’ 

在功能LBPlayer.prototype.resolveTextPlainSubs。

我猜想这是因为在rails中与原生Prototype冲突,但我不知道如何解决它。 感谢

回答

1

事实上它与原型的Array.prototype延伸的冲突:

// leanbackPlayer.js @941 
srt = srt.split('\n\n'); 
var i = 0; var isSub = false; 
this.vars.subs[lang] = {}; 
this.vars.subs[lang].label = {}; 
this.vars.subs[lang].label = label; 
this.vars.subs[lang].track = {}; 

// Error: using for in over an array is just stupid 
//  not even using hasOwnProperty is outright pitiful 
for(var s in srt) { 

    // this will also yield `each` but that's a function which has no .split() method 
    var st = srt[s].split('\n'); 
    var time; var j; 
    if(st.length >= 2) { 
     var t = ""; 

为了解决这个问题,你应该更换for(var s in srt)用一个简单的for循环:

for(var e = 0, el = srt.length; e < el; e++) { 
    var st = srt[e].split('\n'); 
    var time; var j; 
    if(st.length >= 2) { 
     var t = ""; 
     ... 
} 
+0

太好了!谢谢。这是官方解释http://www.prototypejs.org/api/array – megas 2010-12-02 02:03:44