[英]Assign object based on user selection of database row
抱歉,標題有點誤導-我想不出一種輕松命名的方式。
我有一個HTML / JS單頁應用程序(基於自定義框架,但這沒有關系)。 應用啟動時,它將對服務器進行ajax調用以檢索數據。 返回的數據是代表場景的對象數組,然后可以“運行”應用程序。 看起來像這樣:
[
{
id: 1,
name: 'Scenario 1',
... (lots of other stuff)
},
{
id: 2,
name: 'Scenario 2',
... (lots of other stuff)
},
...
]
然后,該應用程序向用戶顯示方案列表,以選擇要運行的方案-該列表顯示名稱-用戶只需單擊其中的一個即可運行相應的方案。
該應用程序的javascript部分有兩個方面。 有通用部分和特定方案部分。 繼續上面的簡化示例,我將獲得:
application.js
scenarioOne.js
scenarioTwo.js
scenarioX.js
文件包含具有通用原型的對象定義,例如:
var scenarioOne = {
var1: 'abc',
...
init: function() { ... },
start: function() { ... },
reset: function() { ... },
processSpecial: function() { ... },
...
}
這樣,一旦我引用了特定的方案對象,就可以在其上調用方法,而不必擔心要處理的方案。
到目前為止,一切都很好-整個過程工作正常。 我正在努力的是如何根據用戶選擇來選擇正確的方案。 在我的主要appliation.js
,我想要這樣的東西(偽代碼):
var scenario;
switch(selected scenario) {
case 'scenario1':
scenario = scenarioOne;
break;
case 'scenario2':
sceario = scenarioTwo;
break;
...
}
scenario.init();
scenario.start();
出於顯而易見的原因,我不能依賴所選的方案ID,因為這些ID由服務器決定並且可以更改。 我覺得要使用的javascript對象應該由服務器指定為場景數據的一部分(我確實控制了服務器,所以這不是問題),因此從服務器返回的數據將變為:
[
{
id: 1,
name: 'Scenario 1',
jsobject: 'scenarioOne',
... (lots of other stuff)
},
...
]
但是然后我將不得不使用eval
來獲取正確的對象:
eval('scenario = ' + serverdata[selected_id].jsobject);
而且我不喜歡eval
。
那么,有沒有更好的方法來解決這個問題? 還是eval
是我的朋友在這里?
如果要在全局范圍內執行所有操作,則所有變量都將存在於window對象上。
所以你可以這樣做:
scenario = window[serverdata[selected_id].jsobject];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.