Я создал подкласс Array (используя TypeScript), чтобы иметь возможность добавлять в массив дополнительные функции. См. код ниже.
С тех пор я заметил, что тег {for}
JsRender/JsViews больше не работает. Я также заметил, что JsRender/JsViews использует $.isArray(...)
для перебора массивов, что возвращает false
для массивов подклассов.
Когда я изменяю код JsRender/JsViews для использования (data instanceof Array)
, он работает.
Есть ли другой способ (без изменения кода JsRender/JsViews) заставить массивы подклассов работать с тегом JsRender/JsViews {for}
?
Машинопись:
module MyModule {
export class Collection<T> implements Array<T> {
constructor() {
Array.apply(this, arguments);
return new Array();
}
length: number;
toString(): string { return ""; }
//... All other Array properties/methods
}
// replace dummy declarations with the real thing
Collection['prototype'] = new Array();
}
Сгенерированный Javascript:
var MyModule;
(function (MyModule) {
var Collection = (function () {
function Collection() {
Array.apply(this, arguments);
return new Array();
}
Collection.prototype.toString = function () { return ""; };
//... All other Array properties/methods
return Collection;
})();
MyModule.Collection = Collection;
// replace dummy declarations with the real thing
Collection['prototype'] = new Array();
})(MyModule|| (MyModule= {}));
class NumberCollection extends Collection<number>
. Я создал JsFiddle, чтобы проиллюстрировать проблему. При использовании Collection это работает, а при использовании SubclassedCollection — нет. Как я упоминал выше: я заставил его работать при изменении JsView, чтобы использовать(data instanceof Array)
вместо$.isArray(data)
. - person Erik v O.   schedule 12.03.2015