0

Недавно я обнаружил, что есть дополнительные свойства для некоторых виджетах jQuery UI, которые работают, но не документированы. Например, при предоставлении свойства buttons в диалоговом окне jQuery UI 1.11.4 я могу использовать под-свойства, такие как id и autofocus, ни один из которых не указан в official documentation.Как узнать все доступные свойства при использовании виджета jQuery UI?

$("#myDialog").dialog({ 
    title: "Do the thing?" 
    buttons: 
    [ 
     { 
      text: "Yes", 
      id: "dialogBtnYes", 
      click: function() { 
       $(this).dialog("close") 
      } 
     }, 
     { 
      text: "No thanks", 
      id: "dialogBtnNo", 
      autofocus: true, 
      click: function() { 
       $(this).dialog("close") 
      } 
     } 
    ] 
}); 

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

Расчесывает исходный код, что вы, ребята, рекомендовали бы для выяснения других «скрытых» функций, или это невозможно? Если это способ пойти, есть ли какой-либо совет, который вы можете дать мне о том, как это сделать когда-нибудь, прежде чем наше солнце станет красным гигантом? Если нет, какие другие методы вы могли бы порекомендовать для изучения того, что еще может предложить jQuery UI (или любая инфраструктура JavaScript)?

+0

Jacob, для рабочего кода, перейдите к codereview.stackexchange.com. Я никогда не был там сам, но я слышал отличные вещи. –

+0

@PeterWard Этот вопрос не имеет ничего общего с просьбой о пересмотре включенного кода. –

+1

В нормальных условиях нецелесообразно использовать незарегистрированные функции. Эти функции в основном не документированы по какой-либо причине. Причинами могут быть: только для внутреннего использования, при тестировании, с учетом изменений, которые могут нарушить существующий код ... – Flyer53

ответ

1

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

function getUDFs() 
 
    { 
 
    var current; 
 

 
    /* Use a local variable named current instead of a global variable */ 
 

 
    for(current in arguments[0]) 
 
     { 
 
     getUDFs.id = arguments[1] + " => "; 
 

 
     /* If the property is not null or undefined */ 
 
     if (!!arguments[0][current] || arguments[0][current] === "") 
 
     { 
 
     /* If the constructor is a standard JavaScript type */ 
 
     if (/Function|String|Object/.test(String(arguments[0][current].constructor))) 
 
      { 
 
      /* Store in an array */ 
 
      if (getUDFs.hasOwnProperty("data")) 
 
      { 
 
      getUDFs.data.push(getUDFs.id + current) 
 
      } 
 
      else 
 
      { 
 
      getUDFs.data = [] 
 
      } 
 
      } 
 

 
     if (/Object|Function/.test(String(arguments[0][current].constructor))) 
 
     { 
 
     getUDFs(arguments[0][current], getUDFs.id + current) 
 
     } 
 
     } 
 
     } 
 
    } 
 

 
getUDFs($.ui,"jQueryUI"); 
 
console.log(getUDFs.data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>

В id и mousemove свойства добавляются после того, как объект JQuery UI становится DOM-элемент. Например:

function getUDFs() 
 
    { 
 
    var current; 
 

 
    for(current in arguments[0]) 
 
     { 
 
     getUDFs.id = arguments[1] + " => "; 
 

 
     if (!!arguments[0][current] || arguments[0][current] === "") 
 
     { 
 
     if (/Function|String|Object/.test(String(arguments[0][current].constructor))) 
 
      { 
 
      if (getUDFs.hasOwnProperty("data")) 
 
      { 
 
      getUDFs.data.push(getUDFs.id + current) 
 
      } 
 
      else 
 
      { 
 
      getUDFs.data = [] 
 
      } 
 
      } 
 

 
     if (/Object|Function/.test(String(arguments[0][current].constructor))) 
 
     { 
 
     getUDFs(arguments[0][current], getUDFs.id + current) 
 
     } 
 
     } 
 
     } 
 
    } 
 

 
getUDFs(document.body,"document.body"); 
 
console.log(getUDFs.data);

Список литературы

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