JQuery: как написать функцию плагина, которая будет принимать имя функции в виде строки и запускать ее? - PullRequest
3 голосов
/ 30 октября 2010

Я сталкиваюсь с проблемой и не знаю, как ее решить в jQuery.

Моя цель - написать расширенную функцию, заменяющую функцию Facebook callSWF.

Facebook callSWF run like that:   **domObj.callSWF("myFunctionName", param1, param2 ... paramx);**

СейчасМне нужно заменить эту функцию.Для jQuery я могу вызвать Flash через JS следующим образом:

if($('#swfObj')[0])
 {
  $('#swfObj')[0].myFunctionName(param1, param2 ...);
 }
 else
 {
  $('#swfObj').myFunctionName(param1,param2 ...);
 }

Однако это означает, что мне нужно поменять на 50+ разных мест, что предыдущий вызов callSWF, и заменить этот блок кода другимимена функций.это не хорошо.

так что, я решил написать расширение.в идеале я могу позвонить так:

$ ('# swfObj'). callSWF ("myFunctionName", param1, param2 ...);

Я начинаюнаписание функции и застрял .... вот мой код до сих пор:

(function( $ ){
  $.fn.callSWF = function(swfFuncName, param1) {

 if($(this)[0])
 {
  $(this)[0].**swfFuncName**(param1);
 }
 else
 {
  $(this).**swfFuncName**(param1);
 }

 return this;
  };
})( jQuery );

Часть, которую я не знаю, как сделать, это ... динамически передать имя функции (чтоимя функции swf).Итак, swfFuncName будет отличаться в зависимости от функции флэш-памяти, с которой я собираюсь общаться.

Например, я могу сделать это:

**$('#swfObj').callSWF("showMyName", 'whatever');**
**$('#swfObj').callSWF("anotherFunction", 1234);**
**$('#swfObj').callSWF("yetAnotherFunction", 'kbieure');**

Есть идеи?спасибо.

1 Ответ

1 голос
/ 30 октября 2010

Ключ заключается в том, чтобы просто использовать то, что большинство назвало бы синтаксисом «массива» вместо синтаксиса «объекта», чтобы ссылаться на соответствующее свойство $(this)[0] или $(this) (в зависимости от обстоятельств)

 if($(this)[0])
 {
  $(this)[0][swfFuncName](param1);
 }
 else
 {
  $(this)[swfFuncName](param1);
 }
...