2011-07-28 4 views
0

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

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

Проблемы у меня есть на данный момент: 1. Как я могу все еще держать один глобальное пространство имен 2. Что является лучшим способом для чтения значений из одного файла и использовать его в библиотеке, присутствующей в другом файле.

например, я придумал что-то вроде

//File ONE with values 
var main.dynamicvalues = (function(){ 
    var a = 10, 
    b = 20, 
    c = 30; 
    return { 
     a:a, 
     b:b, 
     c:c 
    } 
}()); 


//File TWO with core Library 
var main.library = (function(){ 
    //Various Private functions that need to use a,b,c variables from above main.dynamicvalues namespace 

    return { 
     //Public functions again need to use a,b,c from above namespace. 
    } 
}()); 

Есть ли способ я могу иметь рисунок, так что я держать только один глобальное пространство имен и может ссылаться на переменные напрямую, без использования maincode.values.a , maincode.values.b, maincode.values.c или что-то подобное в maincode.library.functions

Благодарности Sparsh Гупта

+0

попробовать AMD. Определение асинхронных модулей commonJS – Raynos

ответ

2

Этот подход немного лучше, но это не совсем то, что вы ищете.

var main = {}; 

main.dynamicvalues = (function() { 
// same as before 
})(); 


main.library = (function(dyn){ 
     // use dyn.a, dyn.b etc 

     return { 

      // same in here 
     } 
    }(main.dynamicvalues)); 
1

Создать новый файл (возможно назвать это что-то вроде "common.js") и поместите здесь значения.

0

Вы можете попробовать RequireJS. Это позволит вам делать то, что вы хотите, без глобального пространства имен вообще (если хотите). Кроме того, он даст вам неблокирующую загрузку скриптов, простой способ обработки зависимостей и инструмента сборки.

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

Ваш код с RequireJs мог бы выглядеть следующим образом:

// File one with values, let's name it values.js 
define([], function() { 
    var a = 10, 
     b = 20, 
     c = 30; 
    return { 
     a: a, 
     b: b, 
     c: c 
    } 

}) 

// File two with library 
define([ 
    // load values.js as a dependency 
    'values' 
    // what is returned in values.js can be passed as an argument to the callback 
    ], function(values) { 
    values.a === 10 // true 
}) 
Смежные вопросы