javascript - 如何使用 Meteor/handlebars.js 将 js 加载到我的模板中?

标签 javascript meteor handlebars.js

我正在与 Meteor 合作开展一个项目。我尝试过使用脚本标签加载 javascript 文件,但这当然行不通。我尝试使用脚本标签加载这些相同的文件,我也只是另存为文件并将它们放在 lib 文件夹中,以便最后加载它们。还有一个内部脚本存在加载问题。我什至尝试删除 (function(){ 部分和函数的关闭部分,因为我知道它已经被放入 Meteor 的函数中。如何让下面的代码和其他 js 文件/脚本与 Meteor 正确运行?

(function() {

// Base template
var base_tpl =
        "<!doctype html>\n" +
        "<html>\n\t" +
  "<head>\n\t\t" +
  "<meta charset=\"utf-8\">\n\t\t" +
  "<title>Test</title>\n\n\t\t\n\t" +
  "</head>\n\t" +
  "<body>\n\t\n\t" +
  "</body>\n" +
  "</html>";

var prepareSource = function() {
    var html = html_editor.getValue(),
            css = css_editor.getValue(),
            js = js_editor.getValue(),
            src = '';


    src = base_tpl.replace('</body>', html + '</body>');


     css = '<style>' + css + '</style>';
    src = src.replace('</head>', css + '</head>');


     js = '<script>' + js + '<\/script>';
    src = src.replace('</body>', js + '</body>');

    return src;
 };

 var render = function() {
     var source = prepareSource();

     var iframe = document.querySelector('#output iframe'),
            iframe_doc = iframe.contentDocument;

    iframe_doc.open();
    iframe_doc.write(source);
    iframe_doc.close();
};



var cm_opt = {
    mode: 'text/html',
    gutter: true,
    lineNumbers: true,
};


var html_box = document.querySelector('#html textarea');
var html_editor = CodeMirror.fromTextArea(html_box, cm_opt);

    html_editor.on('change', function (inst, changes) {
    render();
    });


cm_opt.mode = 'css';
var css_box = document.querySelector('#css textarea');
var css_editor = CodeMirror.fromTextArea(css_box, cm_opt);

    css_editor.on('change', function (inst, changes) {
    render();
    });


cm_opt.mode = 'javascript';
var js_box = document.querySelector('#js textarea');
var js_editor = CodeMirror.fromTextArea(js_box, cm_opt);

   js_editor.on('change', function (inst, changes) {
   render();
   });





/*
    Fixing the Height of CodeMirror.
    You might want to do this in CSS instead
    of JS and override the styles from the main
    codemirror.css
*/
var cms = document.querySelectorAll('.CodeMirror');
for (var i = 0; i < cms.length; i++) {

    cms[i].style.position = 'absolute';
    cms[i].style.top = '30px';
    cms[i].style.bottom = '0';
    cms[i].style.left = '0';
    cms[i].style.right = '0';
cms[i].style.height = '100%';
}
/*cms = document.querySelectorAll('.CodeMirror-scroll');
for (i = 0; i < cms.length; i++) {
    cms[i].style.height = '100%';
}*/

}());

最佳答案

您可以将其放在公共(public)文件夹中,然后每当您需要它时,您可以使用 jQuery 的 getScript 加载它,如下所示:

jQuery.getScript(/yourscript.js)

编辑: 如果您使用 Iron-Router 并且并不总是需要加载 javascript(或者需要在渲染模板之前加载),我推荐 Manuel Schoebel 提出的这个聪明的解决方案:

http://www.manuel-schoebel.com/blog/use-meteor-iron-router-waiton-to-load-external-javascript

关于javascript - 如何使用 Meteor/handlebars.js 将 js 加载到我的模板中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712805/

相关文章:

javascript - 使用 jquery.ajax 过滤下拉表单

javascript - 简单的 meteor 方法 Jasmine 测试不起作用

javascript - Meteor: accounts-ui 包

javascript - 从动态分段路由切换到其他路由时,应用程序导出被覆盖

javascript - 动态添加输入字段到Ember模板/路线/ View ,用数据更新模型

javascript - 进出跨度时 tinyMCE 插入符号定位

javascript - 如何在 Angular JS 中将 Service 中的值公开到 HTML

javascript - 在某个时候停止滚动

javascript - 是否有一种标准方法可以使用 Meteor 和 moment.js 在某个时间从集合中删除 Mongo 文档?

javascript - 使用 {{render}} 渲染时的循环计数器