2010-12-17 2 views
0

У меня есть два разных JS-файла: A.js и B.js. A.js выглядит примерно так:вопрос на yui3 JS

YUI.use('a few modules',function(Y) { 
var Spinner=function(config) { 
//invoke a constructor 
} 
Spinner.NAME='spinnerobject'; 
Spinner.ATTRS={ 
status:{ 
value:false 
,readonly:true 
,broadcast:2 
} 
}; 
Y.extend(Spinner,Y.Base, { 
initializer: 
//many initializers here 
, this.setstatus: function() { 
//sets the status variable appropriately 
} 
}); 
}); 

B.js это:

YUI.use('a few modules',function(Y) { 
var button_yui2 = Y.YUI2.widget.Button({ initializing parameters for button} 
); 
button_yui2.on('change',function(e){ 
spinnerobject.setstatus(); // call made to a function in A.js 
}); 

Я не в состоянии вызвать функцию setstatus из B.js. Функция не выполняется вообще. Хотя ошибка не возникает. Что может быть проблемой?

ответ

2

есть куча вещей, которые не имеют смысла с кодом, который вы отправили. где вы создаете экземпляр spinnerobject? я попытаюсь помочь на основе того, что, как я думаю, вы пытаетесь сделать.

Прежде всего, вы никогда не регистрируете компонент прядильщика с системой. в a.js, вы объявляете var spinner внутри функции YUI.use. Это делает невозможным доступ извне к yui.use. вам нужно либо использовать yui.add вместо yui.use, либо поставить Y.namespace ('myNS'). Spinner = Spinner; как последняя строка a.js. Это сделает ваш компонент spinner глобально доступным как Y.myNS.Spinner.

рядом, инициализатор должен быть функцией:

Y.extend(Spinner, Y.Base, { 
    initializer: function(cfg) { 
     // do your init stuff here 
    } 
}); 

и setstatus должны просто быть членом свойства прототипа объекта, переданного продлить

Y.extend(Spinner, Y.Base, { 
    initializer: function(cfg) { 
     // do your init stuff here 
    }, 

    setstatus: function() { 
     // set status 
    } 
}); 

Так что теперь в b.js, вы может инициализировать новый объект-обтекатель

YUI.use('a few modules',function(Y) { 
    var button_yui2 = new Y.YUI2.widget.Button({initializing parameters for button}), 
     spinnerobject = new Y.myNS.Spinner({/*config object*/}); 

    button_yui2.on('change',function(e){ 
     spinnerobject.setstatus(); // call made to a function in A.js 
    }); 
}); 

надеюсь, это поможет. извините, если я не понял, что вы пытались сделать.

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