如何从 HTML 文件中获取脚本并将其移动到它自己的 .JS 文件中?

How to take a script from an HTML file and move it to it's own .JS file?

我正在尝试简化我的 HTML 文件,我有很长的脚本,其中仅包含 HTML(模板),我想将它们移动到它们自己的外部文件中。当 <script> 标签涉及函数时,这对我来说很容易做到,但在我的情况下,它只是直接的 HTML。在新的外部文件中,如何正确输入那些 HTML 标签?见下文。

    <script type="text/template7" id="myStuffTemplate">
  {{#each results}}
  <div class="list-block media-list">
    <ul>
      <li>
        <a href="#" class="item-link item-content">
          <div class="item-media"><img src={{this.pictures['1']}} width="80" height="80px"></div>
          <div class="item-inner">
            <div class="item-title-row">
              <div class="item-title">{{this.name}}</div>
            </div>
            <div class="item-text">{{this.description}}</div>
          </div>
        </a>
      </li>
    </ul>
  </div>
  {{else}}
  <div style="text-align:center">
    <h1>Nothing yet!</h1>
    <h2>Upload things you're willing to trade so you can start trading!</h2>
  </div>
  {{/each}}
</script>

这是 HTML 文件中的脚本。我想把它移到它自己的外部文件中。如何才能做到这一点?当我 link 它时,我是否像引用其他文件一样引用它?例如:

<script type="text/template7"  src="js/views/mystuff.js" id="myStuffTemplate"></script>

提前致谢。

首先,考虑使用像 Angular.js 或 React.js 这样的框架,但这应该适合你:

假设您要将其放入 id=items 的 div 中: <div id="items"> Your code... </div>

  1. 在 html 文件中,在 <body> 结束标记之前添加:

<script type="text/javascript" src="code.js"></script> 包括你的代码和这个 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 包括 jQuery.

  1. 创建一个code.js文件,在里面放入以下代码:

    $(document).ready( function() {
        var myCode = "{{#each results}}" +
    "<div class="list-block media-list">" +
      "<ul>" +
        "<li>" +
          "<a href="#" class="item-link item-content">" +
            "<div class="item-media"><img src={{this.pictures['1']}} width="80" height="80px"></div>" +
            "<div class="item-inner">" +
              "<div class="item-title-row">" +
                "<div class="item-title">{{this.name}}</div>" +
              "</div>" +
              "<div class="item-text">{{this.description}}</div>" +
            "</div>" +
          "</a>" +
        "</li>" +
      "</ul>" +
    "</div>" +
    "{{else}} " +
    "<div style="text-align:center">" +
      "<h1>Nothing yet!</h1>" +
      "<h2>Upload things you're willing to trade so you can start trading!</h2>" +
    "</div>" +
    "{{/each}}";
    
    $( "#items" ).html( myCode );
    } );
    

这不是脚本,而是使用车把或小胡子模板制作的模板。

您不能像使用 Javascript 那样使用 <script src="..."> "source" 它们,但它们可以存储在外部,然后在运行时加载和处理。这需要通过 AJAX 调用异步完成。例如,假设您正在使用 jQuery,您可以通过以下方式实现它:

// request the template
$.get('templates/products.hbs', function(rawTemplate) {
    // once received, convert the raw template to a handlebars template
    var template = Handlebars.compile(rawTemplate);
    // compile the template with your context 'data' and set it on an element with an id
    $('#someTargetId').html(template(data));
}, 'html'); // <-- tell jquery to load the file as html

请注意,即使是小模板也需要一些时间来加载,因此在您的页面加载和模板加载然后显示之间会有延迟。