2014-11-25 53 views
1

最近,我一直在尝试使用sailsjs构建一个非常简单的聊天应用程序,该应用程序只有3个页面,每个页面都有不同的参考数据集Twitter的预输入JS,我打算做的是这样的:将javascript注入到Sailsjs中的所有全局javascript后的特定视图/路由

var socket = io.connect('http://localhost:1337'); 

$(document).ready(function() { 
    var $modalLayer = $(JST['assets/templates/generic/modal.html']({})); 
    $modalLayer.appendTo("body").modal('show'); 

    socket.on('connect', function() { 
     socket.request('/chat/references', {}, function (data) { 
      console.log(data); 
      bindTypeAhead(data); 
      $modalLayer.modal('hide'); 
    }); 

}); 

对于不同的网页我有不同的逻辑,所以需要分成不同的JavaScript文件。

我已经试过是:在pagea.ejs使用标签

  • 和pageb.ejs
  • 使用<% - 块( 'localScripts', 'SCRIPT_TAG')%>

这两种方法都使脚本出现在pipeline.js中定义的所有javascript注入之前,因此socket.io变得未定义。

我在stackoverflow上找到的一些解决方案是将javascript注入移动到“< head>”,但我认为这是一种很不好的方式,我真的不想打破sailsjs约定。

有没有人有这样做的好方法?

非常感谢。

我使用的风帆版本为0.10.5。

回答

0

在我的项目中,我使用了一个布局模板和一个<%-scripts%>标记来指定子页面脚本应该放在哪里。

+0

它是在所有注射后出现的吗? layout.ejs默认由sailsjs自己填充,我没有单独的一个,请问你能告诉我你是如何做到的? – hjbolide 2014-11-25 07:43:20

+0

在您的页面中,您可以使用<%layout('layoutName') - %>标记来指定要在views文件夹中使用或修改layout.ejs的布局。 您可以在以后将您<%-scripts%>标签: <! - 模板 - > < - TEMPLATES END - > < - 脚本 - !> < - SCRIPTS END--! > – Dinana 2014-11-25 07:50:13

+0

这是否意味着我们需要为每个我们想要特殊js文件的页面创建特定布局? 根据config/view.js中的文档,布局用作顶级HTML模板。这意味着我们将有重复的代码。 – hjbolide 2014-11-25 08:06:25