2015-03-19 3 views
2

я "м пытаюсь научить мое собственное кодирование для некоторого отображения работы, и я не могу обернуть мою голову вокруг этогоИспользование JavaScript переменных

У меня есть функция JavaScript, которая вызывается с помощью кнопки.: Этого код связывает свою кнопку с помощью Dojo:

on(dom.byId("metro"), "change", updateLayerVisibility); 

следующий код правильно поворачивает мой слой от (метро определяется в другом месте)

function updateLayerVisibility(){ 

metro.setVisibility(false); 
    } 

Однако, если я пытаюсь использовать переменную я получаю ошибку «test.setvisiblity не является функцией»

function updateLayerVisibility(){ 
var test = "metro"; 
test.setVisibility(false); 
} 

Так что мой вопрос, в чем разница между этими двумя? почему «метро» не заменяет «тест»? Если это потому, что переменная является строкой, в чем она должна быть преобразована.

спасибо (и извините за странный вопрос)

+2

Да, это потому, что 'test' является строкой. Вы могли бы выполнить 'test = metro;' но в какой-то точке, зачем вообще использовать переменную? –

+0

Я хочу использовать ту же функцию, чтобы отключить много слоев. –

ответ

1

В вашем примере выше, test это просто строка и строки не имеют метод с именем setVisibility. Однако объект metro (по-видимому) делает.

методы, доступные для строк можно увидеть здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#Methods

+0

ОК, как бы программным образом изменить «тест» на «метро» и заставить его работать? Например, я попытался «вар текст = тест +» .setVisibility (False); текст».. , который не работал –

1

metro является идентификатором. В этом контексте это переменная . В этом случае он будет иметь значение, являющееся объектом с свойством setVisibility, которое имеет (в свою очередь) значение, которое является функцией.

test также является идентификатором и переменной. Он имеет значение, которое является строкой "metro". Строка не имеет связи с переменной metro и не имеет свойства setVisibility.

+0

Великий ответ Как бы я подключить„тест“к переменной„метро“ –

+0

?. http://stackoverflow.com/questions/5187530/variable-variables-in-javascript – Quentin

1

Ключевой частью вашего вопроса является то, где вы говорите «метро определено в другом месте». Как уже было предложено другими, ваш объект metro - это не просто строка со значением (как ваш тестовый объект), а ссылка на конкретный тип объекта, который имеет определенные функции, такие как setVisibility.

Я думаю, что я вижу, что вы хотите сделать: программно включать и выключать отдельные слои. Если вы знаете идентификатор уровня, то вы можете получить ссылку на слой с помощью:.

var layer = map.getLayer(id); 

(где map ваша ссылка на объект ArcGIS карты и id является строка имени слоя, чтобы вернуть Так что если вы был слой с идентификатором «метро» вы получите его с:

var layer = map.getLayer("metro"); 

Здесь вы можете заменить строку, переданную в метод getLayer для любого другого значения строки, которая представляет собой идентификатор слоя вы хотите.

После того, как вы получили ваш объект слоя вы можете установить его видимость таким же образом, как вы были со ссылкой слоя метро:

layer.setVisibility(false); 

Надеется, что это помогает!