我有一个产品搜索结果prodArray
,用于渲染我的.ejs脚本。它由基于先前查询的多个对象组成。每个对象都包含一个startDate
字段,该字段是Date()
个对象。我希望moment.js以更愉悦的方式显示这个日期(我决定的格式)。我使用ejs使用我的date.toString()填充<span>
标记。然后我希望jQuery在加载文档时选择它并以我想要的格式显示它。
这可能不是最好的做事方式。我对任何建议持开放态度。
我的.ejs代码如下:
<h1>My List of products</h1>
<% prodArray.forEach(function (product) { %>
<div class="product">
<h2><%= product.name %></h2>
<p>Starting: <span class="moment"><%= product.startDate.toString() %></span><br/>
Places: <%= product.places.max %><br/>
</p>
</div>
<% }) %>
<script>
$(document).ready(function () {
// $('.moment').text( moment( $(this).text() ).format('MMM Do YYYY hh:mm') )
// DOES NOT RUN.
// $('.moment').text( moment( $(this).contents() ).format('MMM Do YYYY hh:mm') )
// POPULATES ALL MY PRODUCTS WITH THE SAME DATE
// $('.moment').text( moment( $(this).val() ).format('MMM Do YYYY hh:mm') )
// POPULATES ALL MY PRODUCTS WITH 'INVALID DATE'
/*
$('.moment').on("ready",function () {
var datestr = $(this).text();
$(this).text(moment(datestr).format('MMM Do YYYY hh:mm'))
})
DOES NOT AFFECT ANYTHING. */
})
</script>
我尝试过的一些内容在脚本中被注释掉,并且它们的效果都在下面写出来。有没有
$(.moment).nothinghappened(function () {
// blah
})
事件?
如果您有任何建议我会非常感激。
答案 0 :(得分:0)
我认为你可以做点什么
<p>Starting: <span class="moment"><%= moment(product.startDate).format('dd-MMM-YYYY') %></span><br/>
答案 1 :(得分:0)
所以我通过消除在客户端使用时刻的需要解决了这个问题。如果在渲染ejs时将片段作为局部变量传递。
var moment = require('moment')
router.get('/product', function (req,res,next) {
mongoose.model('products').find({}).exec(functions (error, prodArray) {
res.render('productTemplate',{
prodArray: prodArray,
moment: moment
})
})
})
然后您可以像这样使用它
<p>Starting: <span class="moment"><%= moment(product.startDate).format('MMM Do YYYY hh:mm') %></span>
在你的模板中。
归功于@Sean Murin和@Zohaib Ijaz