2015-01-07 2 views
1

Im используя D3 и JS.Как вызвать функцию с параметрами из другой функции с параметрами?

У меня есть функция, которая создает кнопки, а один из параметров - onClick, который запускается при нажатии кнопок (очевидно).

Например:

simpleButton(imageURL, width, height, title, onClick){ 
.attr("xlink:href", imageUrl) //-original image 
    .attr("width", width) //-icon width 
    .attr("height", height) //-icon height 
    .on("click", onClick) 
    .append("svg:title") 
    .text(title); //-give the button a title 
} 

Теперь одна из моих кнопок, которые я собираюсь использовать, чтобы скрыть некоторые формы (то есть набор visibility:hidden).

Так что я создал еще одну функцию, чтобы скрыть выделение, что-то вроде:

hideSelection(selection){ 
    selection.classed("hidden", true); 
} 

Эта функция принимает от одного параметра, так что я могу пройти через то, что я хочу, чтобы скрыть.

Так, например, что я думал, что будет работать, выглядит так:

simpleButton("\images\dog", 100, 100, "dog", hideSelection(dog)); 

Теперь, это работает, но он работает сразу без меня нажатия. Я знаю, что это потому, что я вызываю hideSelection прямо из-за скобки -().

Но мой вопрос в том, как я могу немедленно вызвать эту функцию при ее запуске? Как запустить функцию с параметрами через другую функцию с параметрами (если это вообще имеет смысл)?

+0

ах я не знаю, но теперь я do :) Спасибо – rekoDolph

ответ

2

Вы должны обернуть его в анонимной функции:

simpleButton("\images\dog",100,100, "dog", function() { 
    hideSelection(dog) 
}); 

Эта функция имеет доступ к переменной dog, потому что это closure - функция, которая имеет доступ к родительской области в то время он был создан.

+0

закрытий !! читал о том, что на прошлой неделе полностью забыл. Спасибо, все работает отлично :)). Я выбираю это как ответ, когда это позволяет мне – rekoDolph

2

Вы действительно вызов hideSelection(dog) немедленно и передавая результат о том, что в simpleButton - вам нужно пройти ссылки на функцию. Самый простой способ сделать это, чтобы обернуть его в другой функции:

simpleButton("\\images\\dog", 100, 100, "dog", function() { 
    hideSelection(dog) 
}); 

(PSYou, вероятно, хотят, чтобы избежать \ с в пути изображения тоже)

+0

@joews избили вас, я боюсь: L спасибо, хотя, поймите это сейчас :) и ссылка на изображение была всего лишь примером, еще раз спасибо :) – rekoDolph

Смежные вопросы