2012-02-13 5 views
2

У меня файла JavaScript следующим образомКак обновить внутреннюю конфигурацию из-за пределов пространства имен?

(function (rpc) { 

    rpc.loadHomeBanner = rpc_loadHomeBanner; 
    function rpc_loadHomeBanner(){ 

     // AN is used by Sencha Animator as an Animation variable 
     rpc.AN ={}; 

     rpc.AN.Controller = { 

      setConfig: function(configData) { 
       // update config crap 
      } 
     }; 

     var configData = { 
      // config crap 
     }; 

     rpc.AN.Controller.setConfig(configData); 
    } 
})(rpc); 

Теперь на самой первой загрузке страницы, я называю

rpc.loadHomeBanner(); 

и разжигает так же, как мне нужно, чтобы это.

Проблема в том, что у меня есть метод handleOrientationChange, который должен обновлять конфигурацию из-за пределов пространства имен (я не хочу запускать метод loadHomeBanner из-за служебных данных).

handleOrientationChange: function(){ 
     // Updating the config for the animation to ensure appropriate width. 
     var configData = { 
      // config crap 
     }; 
     rpc.AN.Controller.setConfig(configData); 
    } 

Как я могу позвонить rpc.AN.controller.setConfig из за рамки закрытия?

+1

Вы передаете 'rpc' с внешней стороны, так что вы должны быть в состоянии просто позвонить' rpc.AN.controller.setConfig' из любого места где 'RPC 'видно. На самом деле я не вижу никакого преимущества закрытия. –

+1

@FelixKling: Я надеюсь, что это не весь код в этом модуле, Chase показывает только, что необходимо? –

ответ

1

Он уже должен быть доступен, учитывая, что вы передали объект rpc в этот модуль кода.

+0

hrm ... Я чувствую себя немного глупо. Ошибка, которую я получал, была брошена внутри метода setConfig. Я должен сделать немного больше проблем, прежде чем задавать глупые вопросы. –

+0

[принимаем] за 5 минут. –

0

Вы должны создать factory.

var createRPC = function(rpc) { 
    rpc.AN = { 
     Controller: { 
      setConfig: function(configData) { 
      } 
     } 
    }; 

    return { 
     updateConfig: function(configData) { 
      rpc.AN.Controller.setConfig(configData); 
     }; 
    }; 
}; 

, а затем использовать его как

var rpc = createRPC({}); 

//handle orientation change 
rpc.updateConfig({ 
    some: 'data' 
}); 
+0

обратите внимание на его другой вопрос: http://stackoverflow.com/questions/9264349/whats-the-difference-between-these-two-approaches-to-namespacing/9264443#9264443 для объектной формы он контекст использования. –

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

  • Нет связанных вопросов^_^