我可以在app.js文件中使用把手模板吗?

时间:2016-08-05 17:15:58

标签: javascript handlebars.js

我正在创建一个投资组合页面,我希望有一张图片消失,并显示有关其背后图像的文字。我实现了对数据的硬编码。

喜欢这个。

的index.html

  <div class="col-sm-6">

    <h4>Freelance Work</h4>

    <img src="/images/andersen.png" class="portfolio_pic" id="test_pic">

    <div id="test_text">
      <p>Site for a structural engineer.</p>
      <p><strong>Languages:</strong> JavaScript, HTML, CSS</p>
      <p><strong>Other:</strong> Git, Bootstrap, GoDaddy Hosting</p>
    </div>

    <p><a href="https://andersen-engineering.com/">Andersen Engineering</a></p>
    <p><a href="https://github.com/nwimmer123/david-excel">GitHub Link</a></p>

  </div>

styles.css的

#test_text {
  margin-top: -220px;
  min-height: 210px

}

#test_pic {
  max-height: 250px;
  border: medium groove #660033;
}

app.js

  $('.test_text').hide();

  $('.test_pic').hover(function () {
    $(this).stop().animate({
        opacity: .1
    }, 200);
    $('.test_text').show();
  }, function () {
    $(this).stop().animate({
        opacity: 1
    }, 500);
    $('.test_text').hide();
  });

问题是当我从我的mongoose数据库中引入相同的信息时,使用此代码

的index.html

<div class="col-sm-6"> 
  <div class="list-group" id="portfolio_items-list">
    <script id="portfolio_items-template" type="text/x-handlebars-template">
      {{#each portfolio_items}}
        <h4>{{title}}</h4>

        <img src={{image}} class="portfolio_pic" id="test_pic">

        <div id="test_text">
          <p>{{description}}</p>
          <p><strong>Languages: </strong>{{language}}</p>
          <p><strong>Frameworks: </strong>{{framework}}</p>
          <p><strong>Libraries: </strong>{{library}}</p>
          <p><strong>Database: </strong>{{database}}</p>
          <p><strong>Other: </strong> {{other}}</p>
        </div>

        <p><a href={{sitelink}}>{{sitename}}</a></p>

        <p><a href={{githublink}}>GitHub Link</a></p>

        {{/each}}
    </script>
  </div>
</div> 

app.js

  var source = $('#portfolio_items-template').html();
  var template = Handlebars.compile(source);

  //get all database items

  $.get(baseUrl, function (data) {
    var dataHtml = template({ portfolio_items: data});
    $("#portfolio_items-list").append(dataHtml);
  });

然后没有test_pic和test_text id的唯一ID,所以javascript hide / show / opacity技巧不起作用。我在想是否可以将模板带入app.js并将每个portfolio_items数据库id加载为hide / show / opacity js代码的唯一ID,然后它可能会起作用。另一个选择是通过把手模板使唯一ID出现在index / html文件中,然后每次使用硬编码的id复制hide / show / opacity js代码,但这将非常不干。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

{{@in}}}提供了手柄中{{each}}循环的索引,因此您可以执行id="test-pic-{{@index}}之类的操作来生成唯一ID。

FWIW你也可以用.css完成你正在创造的效果(见下文)。

.container {
  width:50%;
  height:250px;
  overflow: hidden;
  background: rgba(0, 0, 0, 0.5);
  transition: all .3s ease;
}

.container:hover {
  background: rgba(0, 0, 0, 0.1);
}


.text {
  font-size: 2em;
  opacity: 0;
  transition: all .3s ease;
}

.container:hover .text {
 opacity:1;

}
<div class="container">
  <div class="text">
    <p>hello</p>
    <p>test</p>
  </div>
</div>