Javascript函数

时间:2009-06-26 15:25:27

标签: javascript design-patterns

我们试图根据请求地址仅提供某些功能。

我想知道我们怎么做到这一点:

if(condition1) 
{
    $(document).ready(function() {
        ...
        ... 
        // condition1's function
    });
}
else if(condition2) 
{
    $(document).ready(function() {
        ...
        ... 
        // condition2's function
    });
else if...

我想知道一个好的模式对此有用吗?因为我们将所有功能都放在一个文件中。

8 个答案:

答案 0 :(得分:4)

这取决于你的条件......

如果它们都是类似的格式,您可以执行类似

的操作
array = [
    ["page1", page1func],
    ["page2", page2func],
    ...
]

for(i=0; i<array.length; ++i)
{
    item = array[i];
    if(pageName == item[0]) $(document).ready(item[1]);
}

答案 1 :(得分:3)

我最喜欢Nick's answer,但我可能采用哈希表方法,假设“请求地址”是已知的固定值:

var request_addresses = {
    'request_address_1': requestAddress1Func,
    'request_address_2': requestAddress2Func
};

$(document).ready(request_addresses[the_request_address]);

当然,request_addresses也可能是这样的:

var request_addresses = {
    'request_address_1': function () {
        /* $(document).ready() tasks for request_address_1 */
    },
    'request_address_2': function () {
        /* $(document).ready() tasks for request_address_2 */
    }
};

答案 2 :(得分:1)

我没有看到任何问题。但这可能会更好:

$(document).ready(function() {
    if (condition1) 
       // condition1's function
    else if (condition2)
       // condition2's function
    ...
});

答案 3 :(得分:1)

在服务器上进行站点URL检查可能会更干净(如果可以的话?)并根据条件包含不同的.js文件,例如

**使用ASP.NET MVC

<html>
<head>
  <%
  if(Request.Url.Host == "domain.com")
  { %><script type="text/javascript" src="/somejsfile1.js"></script><% }
  else
  { %><script type="text/javascript" src="/somejsfile2.js"></script><% }
  %>
</head>
</html>

这样,每个js文件都是独立的,而且你的HTML也不包含它不需要的JS行(即代码用于“其他”站点)

答案 4 :(得分:0)

也许你可以提供更多关于你究竟在做什么的细节,但是从我所知道的为什么你不能为每个页面创建一个包含必要函数的不同JS文件,而不是试图将所有这些文件转储到一个档案。

答案 5 :(得分:0)

我会将所有功能留在一个文件中,如果它们已经是这样的话。这将节省您返工的时间,并通过降低延迟成本和浏览器缓存来节省用户时间。只是不要让那个文件太大。调试和修改将变得可怕。

如果将它们全部保存在一个文件中,请在每个调用所需文件的页面上添加一个脚本。

function funcForPage1() {...}

function funcForPage2() {...}

然后,在第1页

$(funcForPage1);

答案 6 :(得分:0)

不要按照您的计划进行操作,而是考虑以某种逻辑方式对函数进行分组并为组命名。

你有一个对象,它包含保存函数的对象并调用如下:

serial = myApp.common.getSerialNumber(year,month);
model = myApp.common.getModelNumber(year);

myApp.effects.blinkText(textId);

如果你想隐藏每页的一个或多个函数,我想你可以在加载后通过函数或组将它们置零。但希望有条理的事情可以满足你清理全局命名空间的愿望。

答案 7 :(得分:0)

我想不出一种使用JavaScript实现这一目标的特别优雅的方法。如果这是您可以使用的全部内容,那么我至少建议您使用switch语句或(最好)哈希表实现来引用您的函数。

如果我必须做这样的事情,鉴于我的开发环境完全在我的控制之下,我将JavaScript分解为单个文件然后,在确定了请求之后,我将使用服务器端代码来构建自定义捆绑的JavaScript文件并提供服务。您可以在服务器上创建这些文件的缓存副本,也可以发送客户端缓存头。

这个article,作为系列文章的一部分,可能会引起您的兴趣。