2015-04-14 3 views
0

При настройке приложения dojo рекомендуемая передовая практика для инициализации переменных в отношении объектов dom? Я обнаружил, что мне обычно нужна ссылка на родительский и дочерний объекты поверх самого виджета и создаются глобальные заполнители со следующим кодом.Рекомендации по определению переменных JavaScript

var formItems = ["Item_1", "Item_2", "Item_3", ... "Item_15"]; 

formItems.forEach(function(formItem) { 
    var items = ["frm", "dom", "dijit"]; 
    items.forEach(function(item) { 
     var x = item + formItem; 
     window[x] = undefined; 
    }); 
}); 

против

var frmItem_1, frmItem_2, frmItem_3, ... frmItem_15; 
var domItem_1, domItem_2, domItem_3, ... domItem_15; 
var dijitItem_1, dijitItem_2, dijitItem_3, ... dijitItem_15; 

Переменные фактически заселена позже в приложении додзё после того как все было анализироваться, но на «сохранить», JSHint расстраивается из-за отсутствия реальных явных переменных определяется.

+2

можете ли вы поместить их все в объект, чтобы вы могли повторять их и делать только один глобальный? – dandavis

+1

Вы имеете дело прежде всего с диджитами, где вы можете использовать реестр dijit для получения дескрипторов определенных виджетах и ​​дойти до определенных узлов таким образом? – jason0x43

+0

дан, наверное. Похоже, лучший совет - держать все в одном месте, согласно советам pswg ниже. – disuse

ответ

2

Мне не понравился ни один из этих вариантов. Я предпочитаю иметь как можно меньше глобальных переменных. Я бы рекомендовал инициализировать массив для хранения ваших элементов, а затем ссылаться на этот массив в вашем приложении dojo.

var formItems = []; 
for(var i = 0; i < 15; i++) { 
    formItems.push({ 
     frm: null, 
     dom: null, 
     dijit: null 
    }); 
} 

И в вашем приложении додзё заменить:

  • frmItem_N с formItems[N].frm
  • domItem_N с formItems[N].dom
  • dijitItem_N с formItems[N].dijit

Вы также могли бы быть в состоянии избегайте предварительного заполнения массива, если вы можете сделать приложение додзё вставлять элементы в массив по мере необходимости. Там может быть больше работы, которую вы можете сделать, чтобы массив formItems был неглобальным, но сложно сказать только из предоставленного кода.

+0

Численная нумерация варов - это просто заполнители для имен реальных переменных (например Scale_X, Scale_Y, Project_Manager) , Проблема в том, что у меня есть много настраиваемых модулей dojo, загружаемых через AMD, и обработка триггеров событий в глобальном пространстве проще, чем пытаться передать локальные переменные через код на основе пользовательского вызова модуля. Необходимость «frm» против «dom» и «dijit» заключается в том, чтобы обрабатывать видимость и функциональность в пользовательском интерфейсе на стороне клиента в зависимости от разрешений и других свойств, выбранных конечным пользователем. – disuse

+1

@disuse Это же предложение применимо, просто измените 'formItems' из массива на объект и используйте имена свойств в качестве ключей. например 'formItems ['Scale_X']. frm' или' formItems.Scale_X.frm' –

1

Все это субъективно и зависит от вашего проекта. Вы можете настроить JSHint, чтобы сделать вас счастливым.

Если вы хотите удовлетворить ошибки без изменения каких-либо конфигураций JSHint, инициализируйте переменные за пределами цикла, а затем определите их внутри.

var formItems = ["Item_1", "Item_2", "Item_3", ... "Item_15"], 
    items, 
    x; 

formItems.forEach(function(formItem) { 
    items = ["frm", "dom", "dijit"]; 
    items.forEach(function(item) { 
     x = item + formItem; 
     window[x] = undefined; 
    }); 
}); 
+1

Я думаю, что JSHint, вероятно, жалуется на ссылки на динамически сгенерированные переменные (например, 'frmItem_1') в остальной части кода. Это не затронет эту проблему. –

+0

Исправить RE: динамические переменные. Добавление следующих обращений к жалобам JSHint, но я планирую взять совет, чтобы сделать 1 глобальный var и получить к нему доступ через имена свойств в виде ключей. '/ * globals require: false * /' '/ * jshint unused: true, undef: false * /' – disuse

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