在Javascript中使用外部变量

时间:2016-10-10 08:23:32

标签: javascript django

在我... if mymodel.name == 'Myname1': #do something elif mymodel.name == 'Myname2': #do something else ... 我有类似的事情:

Myname

但我不喜欢它,因为如果hardcoded_words.py更改我应该搜索我的所有代码来更正它,所以我创建了一个文件,我保留所有这些词:

myname1='Myname1' myname1='Myname2' myname1='Myname3' ...

views.py

和我的from myapp import hardcoded_words ... if mymodel.name==hardcoded_words.myname1: #do something elif mymodel.name==hardcoded_words.myname2: #do something else ... 成为:

hardcoded_words.py

如果Myname1发生变化,我只需更正一个文件:

... myname1='Myname1_b' ...

function myfunction1(myvariable1, myvariable2) {
    switch (myvariable1) {
        case 'Myname1':
            //do something
        break;
        case 'Myname2':
            //do something else
        break;
        ...

也许有更好的方式(可以随意告诉),但问题在于Javascript。有办法做这样的事情吗?

我的javascript.js:

#input tag for search box
<input type="search" placeholder="search" class="search_3">        
<a href="https:.........?searchname=">
    #input tag for search button
    <input type="submit" class="submit_3" value="Search"/>
</a>

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

如果你真的需要在javascript中使用相同的列表,那么我建议创建一个可以从AJAX请求中调用的视图,它将返回存储所有这些值的python字典。这样就没有任何重复和地方你需要两次更新相同的东西(DRY)。

然后,简单地说,在您的逻辑需要使用它的区域中,确保在使用这些值之前调用此视图。

理想情况下,您可能需要查看此处涉及的逻辑,看看是否真的需要“魔术”字符串。

答案 1 :(得分:1)

您可以在JS中执行完全相同的操作,只需使用Object创建一个单独的文件,该文件将托管您的键值。

取决于您使用的JS规范,您可以这样做:

ES6:

export const hardcoded_words = {
    myname1: 'Myname1',
    myname1: 'Myname2',
    myname1: 'Myname3'
}

ES5:

window.hardcoded_words = {
    myname1: 'Myname1',
    myname1: 'Myname2',
    myname1: 'Myname3'
}

答案 2 :(得分:1)

我会说将你的硬编码词重构成这样的词典会更好:

name_mappings = {'myname1'='Myname1'
                 'myname1'='Myname2'
                 'myname1'='Myname3'}

为了能够将它导入到简单的Django视图中,您将通过类似/api/get_name_mappings/的URL通过AJAX访问。

因为在这种情况下,你只会有一个词汇&#39;而且你不需要在后端和前端维护它。而且如果你想添加一些更复杂的逻辑,最好还是在一方 - 服务器端。

这种方法可能不方便的唯一情况 - 当你想为你的javascript进行单元测试时。在这种情况下,你需要制作一些js-mocks。

但我同意@Sayse,无论如何这种方式更好更清晰。