首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有一个好的jQuery模式来管理初始化?

有没有一个好的jQuery模式来管理初始化?
EN

Stack Overflow用户
提问于 2010-02-20 07:26:56
回答 4查看 189关注 0票数 6

基本上,我想做这样的事情:

代码语言:javascript
代码运行次数:0
运行
复制
$(document).ready(function() {  
    if ($(body).attr("class") === "HomePage") {  
        HomePage.init(); //bind events for home page (Crockford's module pattern)
    } else if ($(body).attr("class") === "AboutPage") {  
        AboutPage.init(); //bind events for about page  
    }  
});

这样做的原因是,我可以将所有内容缩小到一个js文件中,从而减少http请求的数量。这个解决方案绝对不优雅,因为每当我添加新页面时,我都需要添加另一个'else if‘语句。我可以使用:

代码语言:javascript
代码运行次数:0
运行
复制
$(document).ready(function() {  
    eval($(body).attr("class") + ".init();");
});

但是eval是邪恶的,我不知道使用这种方法会带来什么性能影响。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-20 07:39:32

为什么不使用另一种方法来调用eval对象[]而不是使用javascript

假设所有对象在作用域中都是全局的,为什么不尝试:

代码语言:javascript
代码运行次数:0
运行
复制
$(document).ready(function() {  
    window[$(body).attr("class")].init();
});
票数 4
EN

Stack Overflow用户

发布于 2010-02-20 07:32:40

下面是我在一些项目中使用的模式:

代码语言:javascript
代码运行次数:0
运行
复制
var views = {
    'home': function() {
        // do stuff on homePage
    },
    'about': function() {
        // some about action
    }
}

var c = document.body.className.split(" ");
for (var i=0; c[i]; i++) {
    if (c[i] in views) {
        views[c[i]].call(this);
    }
}

<body class="home"> <!-- home method will be called -->
<body class="home about"> <!-- home and about methods will be called --> 
票数 2
EN

Stack Overflow用户

发布于 2010-02-20 07:35:59

为什么不把主页的代码放在主页文件中,把about页面的代码放在about页面文件中呢?换句话说,为什么你想把所有的javascript代码放在同一个文件中呢?我看不出有任何理由这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2300302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档