#javascript #arrays #smartclient
#javascript #массивы #smartclient
Вопрос:
В настоящее время я создаю проект на работе, требующий от меня извлечения массива объектов и закрепления их на карте.
Я сохраняю свои маркеры в массиве, чтобы иметь возможность сбросить карту, когда пользователь выполняет поиск по другим критериям.
Все это работало отлично, пока я не включил Smart Client
.
Я не очень хорошо знаком с Smart Client
, но, похоже, это добавляет Array
объект класса в мой массив, тем самым нарушая мой цикл for.
var wrap = (function() {
var arr;
function myFunc(a) {
for (var i in arr)
arr[i] = null; //doing this to set all markers to null
}
arr = [];
for (var i in a) {
arr.push(a[i]);
}
}
return {
doSomething: function(a) { myFunc(a); }
}
})();
wrap.doSomething([1,2,3,4]);
wrap.doSomething([1,2,3,4]);
Это выдает TypeError: undefined is not a function
ошибку.
библиотека smartclient, smart gwt. Я включил следующие файлы.
<script>var isomorphicDir = "/smartclient/isomorphic/";</script>
<script src="/gmap/smartclient/isomorphic/system/modules/ISC_Core.js"></script>
<script src="/smartclient/isomorphic/system/modules/ISC_Foundation.js"></script>
<script src="/smartclient/isomorphic/system/modules/ISC_Containers.js"></script>
<script src="/smartclient/isomorphic/system/modules/ISC_Grids.js"></script>
<script src="/smartclient/isomorphic/system/modules/ISC_Forms.js"></script>
<script src="/smartclient/isomorphic/system/modules/ISC_DataBinding.js"></script>
<script src="/smartclient/isomorphic/skins/Enterprise/load_skin.js"></script>
независимо от инициализации этих файлов до или после моего собственного js, я все равно получаю ту же ошибку.
Я открыт для жизнеспособных альтернатив, которые предоставляют лучшее / более чистое решение для создания больших, динамически сортируемых и группируемых таблиц на javascript.
Ответ №1:
Я тоже не знаком со Smart Client, но в вашем коде есть проблема, которая должна объяснить ошибку типа. wrap
Переменной присваивается возвращаемое значение IIFE (функция, которая начинается в строке 1). Поскольку он ничего не возвращает, перенос будет неопределенным. doSomething
это просто функция, локальная для IIFE, поэтому вы не можете вызвать ее вне его.
Кроме того, кажется, есть проблема с фигурными скобками в вашем примере кода? Их слишком много {
по сравнению с }
…
Предполагая, что вы исправили проблему с фигурными скобками, вы можете избавиться от нее, добавив следующее в конце IIFE переноса (после последнего цикла for):
return {
doSomething: doSomething
};
Это должно назначить объект wrap
переменной,
Комментарии:
1. спасибо, я действительно реализовал это в своем коде, я просто слишком увлекся, пытаясь получить правильное форматирование, используя поле ввода SO.