我想在我的模型中添加不在 REST 服务结果中的动态属性。这些动态属性会缩短名称、格式化日期等。例如,我的 CanJS 模型是这样的:
var MyModel = can.Model({
findAll: 'GET /Services/all'),
findOne: 'GET /Services/{id}'),
create: 'POST /Services/all'),
update: 'PUT /Services/{id}'),
destroy: 'DELETE /Services/{id}')
}, {});
然后我像这样检索数据:
MyModel.findAll({}, function(data) {
$('#main').html(can.view('templates/List.ejs'), data));
});
这就是我的 List.ejs 模板的样子:
<% for(var i = 0; i < this.length; i++) { %>
<div class="thumb"><img src="http://cdn.somewhere.com/images/logo.<%= this[i].BaseName %>.png" /></div>
<div class="title"><%= this[i].Name %></div>
<div class="date"><%= moment(this[i].StartDate).format('MMM DD, YYYY') %> - <%= moment(this[i].EndDate).format('MMM DD, YYYY') %></div>
<div class="location"><%= this[i].LocationFriendly %></div>
<div class="description"><%= this[i].Description %></div>
<% } %>
请注意我在模板中为图像 src 和开始/结束日期所做的逻辑。我想把这个逻辑放在模型中,所以我在模板中要做的就是:
<% for(var i = 0; i < this.length; i++) { %>
<div class="thumb"><img src="<%= this[i].ImageURL %>" /></div>
<div class="title"><%= this[i].Name %></div>
<div class="date"><%= this[i].StartDateFriendly %> - <%= this[i].EndDateFriendly %></div>
<div class="location"><%= this[i].LocationFriendly %></div>
<div class="description"><%= this[i].Description %></div>
<% } %>
如何将此逻辑移动到模型层或比模板更好的地方?感谢您提供任何帮助或建议。