Запретить Smart Client добавлять элемент класса Array в мои массивы

#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.