簡體   English   中英

根據用戶選擇的數據庫行分配對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM