Что не так с моей архитектурой 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?


person Eastern Monk    schedule 18.04.2011    source источник


Ответы (2)


return this;

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

var app = Myapp();

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

person Raynos    schedule 18.04.2011

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

var MyApp = function(){

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

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


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

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

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

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

MyApp.toggleButton();
person Kenny Ki    schedule 13.09.2011