Javascript包括控制取决于页面

时间:2011-07-21 18:09:25

标签: javascript include url-routing

我在一个Web应用程序上作为客户端开发人员工作,发现自己有很多模块,每个模块用于不同的页面。我想这是一个好主意,根据路线自己(在javascript中)包括或将此责任传递给后端(ruby on rails)家伙。

我想我需要在每个页面中包含一些application.js,并在其中执行以下操作:

if (window.location.href == '.../somePage') {
    loadScript('somePageControls.js')
}

if (window.location.href == '.../anotherPage') {
    ...
}

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

你应该把它传递给服务器端的人。输出排序脚本包含服务器端更加清晰,因为它们可以将它添加到您需要的页面而不是一个大的if-else。

答案 1 :(得分:1)

好吧,这根本不是一个简单的答案,因为有你和那些有红宝石的家伙,希望一切都好你beetwen you! ;)

虽然如果你不想打扰太多的那些人,(我知道在团队中工作并不容易)你可以要求只包括你工作文件夹中的一个ruby文件。

/web-app/ruby-guys/you/ruby-js.rb

现在您可以使用此唯一文件并从此处加载您需要的所有js文件。通过使用eaxmple一个开关盒

case url-query
  when x
    # print out drag-drop.js
  when y, z
    # print out mouse-move.js 

答案 2 :(得分:0)

我的0.02美元...... 如果您希望最小化到(Rails)服务器的往返,您可以简单地在URL的末尾使用哈希标记,并解析哈希标记以确定哪些模块是必要的。这将允许您在必要时将页面放在CDN上,并使您能够通过让服务器重定向到具有不同散列标记的同一页面来动态更改页面上加载的模块。

E.g。

// Example URL: http://example.com/index.html#mod1,mod2,mod3,mod4
var loadModules = function() {
    var modsArr, i, len;
    if (!location.hash) return false;

    modsArr = location.hash.substr(1).split(','); // ["mod1", "mod2", "mod3", "mod4"]
    if (!modsArr.length) return false;

    for (i=0, len = modsArr.length; i < len; i++) {
        // Now you can load your mods.
    }

}