Что не так с моей архитектурой JavaScript (YUI3)?

#javascript #yui3

#javascript #yui3

Вопрос:

Я пишу веб-приложение, которое использует YUI3 для всех своих JS-потребностей. Мне нужна функциональность, такая как всплывающие подсказки, содержимое которых определяется AJAX-запросами, кнопками переключения и так далее.

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

 var Myapp = function(){

    this.toggleButton(node,config)
    {
        YUI().use(....,function(Y){
            //code to convert NODE into a toggle button;

        });
    }
    return this;
};
  

Затем в моем приложении я просто конвертирую все кнопки в кнопки переключения, вызывая

 var app = Myapp(); 
app.toggleButton(Y.all('.toggle-buttons'),{'text1':'TOGGLE_ME','text2':'TOGGLED_ME'});
  

Все это работает. Но я хотел узнать у более опытных разработчиков, есть ли что-то принципиально неправильное в этом подходе.

Это хороший способ использовать JavaScript?

Ответ №1:

return this;

В этом нет необходимости, поскольку конструкторы функций возвращают this по умолчанию.

var app = Myapp();

Вы забыли вызвать объект window new Myapp() без new ключевого слова this , и вы фактически выполняете запись в глобальную область.

Ответ №2:

В вашем коде есть фундаментальная проблема:

 var MyApp = function(){

    this.toggleButton(node,config)
    {
     ...
  

Вы не определяете функцию для MyApp . Вместо этого вы пытаетесь вызвать ToggleButton при каждом создании его экземпляра. Это должно завершиться неудачей, потому что функция не определена


В вашем случае определение класса и создание экземпляра не требуется, потому что MyApp используется как утилита.

Вы можете определить MyApp как статический объект:

 var MyApp = {
    toggleButton: function toggleButton() {
        // your code
    }
};
  

И вы можете использовать его где угодно с помощью:

 MyApp.toggleButton();