根据用户选择的数据库行分配 object
Assign object based on user selection of database row
抱歉,标题有点误导 - 我想不出一个简单的命名方法。
我有一个 HTML/JS single-page 应用程序(基于自定义框架,但没关系)。当应用程序启动时,它会向服务器发出 ajax 调用以检索数据。返回的数据是 object 的数组,表示随后可以是 "run" 但应用程序的场景。它看起来像这样:
[
{
id: 1,
name: 'Scenario 1',
... (lots of other stuff)
},
{
id: 2,
name: 'Scenario 2',
... (lots of other stuff)
},
...
]
该应用程序随后会向用户显示一个场景列表,供用户选择 运行 - 列表显示名称 - 用户只需单击其中一个即可 运行对应场景
申请的 javascript 部分是 two-fold。有通用部分和特定场景部分。要继续上面的简化示例,我将有:
application.js
scenarioOne.js
scenarioTwo.js
scenarioX.js
文件包含具有共同原型的 object 定义,例如:
var scenarioOne = {
var1: 'abc',
...
init: function() { ... },
start: function() { ... },
reset: function() { ... },
processSpecial: function() { ... },
...
}
这样,一旦我有一个特定场景的引用 object,我就可以调用它的方法,而不必担心我正在处理哪个场景。
到目前为止一切顺利 - 整个过程都很好。我苦苦挣扎的是如何根据用户选择选择正确的场景。在我的主 appliation.js
中,我想要这样的东西 (pseudo-code):
var scenario;
switch(selected scenario) {
case 'scenario1':
scenario = scenarioOne;
break;
case 'scenario2':
sceario = scenarioTwo;
break;
...
}
scenario.init();
scenario.start();
出于显而易见的原因,我不能依赖选定的场景 ID,因为这些 ID 由服务器决定并且可以更改。我觉得要使用的javascript object应该是服务器指定的,作为场景数据的一部分(我确实控制了服务器,所以这不是问题),所以从服务器返回的数据会变成:
[
{
id: 1,
name: 'Scenario 1',
jsobject: 'scenarioOne',
... (lots of other stuff)
},
...
]
然而,我将不得不使用 eval
来获得正确的 object:
eval('scenario = ' + serverdata[selected_id].jsobject);
而且我不太喜欢 eval
。
那么,有没有更好的方法来处理这个问题?或者 eval
我的朋友在吗?
如果您在全局范围内执行此操作,那么所有变量都将存在于 window 对象中。
所以你可以这样做:
scenario = window[serverdata[selected_id].jsobject];
抱歉,标题有点误导 - 我想不出一个简单的命名方法。
我有一个 HTML/JS single-page 应用程序(基于自定义框架,但没关系)。当应用程序启动时,它会向服务器发出 ajax 调用以检索数据。返回的数据是 object 的数组,表示随后可以是 "run" 但应用程序的场景。它看起来像这样:
[
{
id: 1,
name: 'Scenario 1',
... (lots of other stuff)
},
{
id: 2,
name: 'Scenario 2',
... (lots of other stuff)
},
...
]
该应用程序随后会向用户显示一个场景列表,供用户选择 运行 - 列表显示名称 - 用户只需单击其中一个即可 运行对应场景
申请的 javascript 部分是 two-fold。有通用部分和特定场景部分。要继续上面的简化示例,我将有:
application.js
scenarioOne.js
scenarioTwo.js
scenarioX.js
文件包含具有共同原型的 object 定义,例如:
var scenarioOne = {
var1: 'abc',
...
init: function() { ... },
start: function() { ... },
reset: function() { ... },
processSpecial: function() { ... },
...
}
这样,一旦我有一个特定场景的引用 object,我就可以调用它的方法,而不必担心我正在处理哪个场景。
到目前为止一切顺利 - 整个过程都很好。我苦苦挣扎的是如何根据用户选择选择正确的场景。在我的主 appliation.js
中,我想要这样的东西 (pseudo-code):
var scenario;
switch(selected scenario) {
case 'scenario1':
scenario = scenarioOne;
break;
case 'scenario2':
sceario = scenarioTwo;
break;
...
}
scenario.init();
scenario.start();
出于显而易见的原因,我不能依赖选定的场景 ID,因为这些 ID 由服务器决定并且可以更改。我觉得要使用的javascript object应该是服务器指定的,作为场景数据的一部分(我确实控制了服务器,所以这不是问题),所以从服务器返回的数据会变成:
[
{
id: 1,
name: 'Scenario 1',
jsobject: 'scenarioOne',
... (lots of other stuff)
},
...
]
然而,我将不得不使用 eval
来获得正确的 object:
eval('scenario = ' + serverdata[selected_id].jsobject);
而且我不太喜欢 eval
。
那么,有没有更好的方法来处理这个问题?或者 eval
我的朋友在吗?
如果您在全局范围内执行此操作,那么所有变量都将存在于 window 对象中。
所以你可以这样做:
scenario = window[serverdata[selected_id].jsobject];