2010-12-01 54 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