Конфликт двух файлов JavaScript - PullRequest
1 голос
/ 01 декабря 2010

Я играю с html5 LeanBack Player, и он хорошо работает, когда на странице только его javascritpts.Но если я добавлю эти файлы javascript в проект rails 3, то получу ошибку в файле JavaScript LeanBack Player:

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.

Я догадался, что это из-за конфликтас родным прототипом в рельсах, но я не знаю, как решить его.Спасибо

1 Ответ

1 голос
/ 01 декабря 2010

Действительно, это конфликт с расширением прототипов 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 = "";
        ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...