2015-04-14 24 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; 
    }); 
}); 

VS

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

您是否主要處理dijits,在那裏您可以使用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_NformItems[N].frm
  • domItem_NformItems[N].dom
  • dijitItem_NformItems[N].dijit

您可能還可以避免預先填充數組,如果您可以根據需要將您的dojo應用程序推入項目放入數組中。您可以做更多的工作,使得數組非全局性,但僅僅根據提供的代碼很難說清楚。

+0

變量的數字編號只是實際變量名的佔位符(例如Scale_X,Scale_Y,Project_Manager) 。問題是我有很多通過AMD加載的自定義dojo模塊,並且在全局空間中處理事件觸發器比試圖通過基於自定義模塊調用的代碼傳遞局部變量更容易。 對「frm」與「dom」與「dijit」的需求是根據最終用戶選擇的權限和其他屬性來處理客戶端UI中的可見性和功能。 – 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全局變量和訪問它通過屬性名稱作爲關鍵。 (*)*/* globals require:false * /' '/ * jshint unused:true,undef:false * /' – disuse

相關問題