2015-03-21 3 views
0

Я являюсь новичком в dojo, и я пытаюсь переместить часть кода интерфейса в класс, чтобы сохранить методы из моего основного файла.Classy Dojo - Внутренние вызовы методов

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

После того как я создать объект интерфейса во внешнем файле, как показано на рисунке, я могу успешно:

appInterface = new (interface) 
appInterface.showGraphWindow() 
appInterface.hideGraphWindow() 

Однако я не могу работать, как использовать эти функции внутри функции toggleGraphWindow. (Из контекста?)

Если я пытаюсь позвонить:

on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow); 

Он падает на линии:

this.showGraphWindow() 

или

this.hideGraphWindow() 

С: «Неопределенное является не является функцией "

Как закодировать функцию toggleGraphWindow?

Iterface.js

define([ 
    "dojo/_base/declare", 
    "dojo/on", 
    "dijit/registry" 
     ], 
    function(
    declare, 
    on, 
    registry 
    ){ 
    return declare (null, { 
     hideGraphWindow : function() { 
      dijit.byId("graphWindowMain").domNode.style.display = 'none'; 
      dijit.byId("applicationWindow").resize(); 
     }, 
     showGraphWindow : function() { 
      dijit.byId("graphWindowMain").domNode.style.display = 'block'; 
      dijit.byId("applicationWindow").resize(); 
     }, 
     toggleGraphWindow : function(){ 
       if (dijit.byId("graphBtn").checked == true) 
        {this.showGraphWindow()} 
       else 
        {this.hideGraphWindow()} 
     } 
    }); 
}); 
+0

Я думаю, что настоящий вопрос здесь может быть связан с *, что вызывает toggleGraphWindow *? Вы не показываете, какой код его вызывает. 'hitch' в том, как вы его используете здесь, абсолютно ничего не делает в двух смыслах: 1,' hitch' возвращает функцию, поэтому вы генерируете функцию и никогда не вызываете ее, а 2, если у вас есть контекст проблема где-то, вызов 'hitch' здесь слишком поздно, чтобы решить ее, потому что« это »уже не так, что восходит к моему первоначальному вопросу. –

ответ

0

Что случилось с

toggleGraphWindow : function(){ 
      if (dijit.byId("graphBtn").checked == true) { 
       this.showGraphWindow(); 
      } 
      else { 
       this.hideGraphWindow(); 
      } 
    } 

?

+0

Я пытаюсь назвать это в основном приложении: var appInterface = new Interface(); appInterface.hideGraphWindow(); appInterface.toggleGraphWindow(); Первоначально я имел это, как показано Jan, но мои ошибки кода в строке this.showGraphWindow (внутри функции переключения) с «undefined не является функцией», –

0

Благодаря вам обоим, вы действительно правильно Кен, я читал эту аналогичный пост много раз, и как-то не понял ответ в течение:

Calling object methods internally in dojo

После прочтения, что вы выложили, Я как-то понял ответ, связанный выше, и теперь понимаю, в чем была моя проблема! Спасибо всем.

Я установил ее, изменив свой код в главном приложении:

var appInterface = new Interface(); 
on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow); 

изменено на:

var appInterface = new Interface(); 
var graphToggle = dojo.hitch(appInterface, "toggleGraphWindow"); 
on(registry.byId("graphBtn"),"click", graphToggle); 

Я считаю причину ошибки, было то, что «этот» объект во время выполнения, на самом деле был «graphBtn», а не appInterface.

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