Справка по шаблону модуля Javascript - PullRequest
0 голосов
/ 28 июля 2011

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

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

Проблемы у меня на данный момент: 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

Спасибо Спарш Гупта

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

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

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 голос
/ 28 июля 2011

Создайте новый файл (возможно, назовите его что-то вроде «common.js») и поместите туда значения.

0 голосов
/ 28 июля 2011

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

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

Ваш код с 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
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...