Я хотел бы добавить в свою модель динамические свойства, которых нет в результатах службы 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>
<% } %>
Обратите внимание на логику, которую я использую в шаблоне для источника изображения и даты начала/окончания. Я хотел бы поместить эту логику в модель, поэтому все, что мне нужно сделать в шаблоне, это:
<% 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>
<% } %>
Как переместить эту логику на уровень модели или в любое другое место, которое лучше, чем шаблон? Спасибо за любую помощь или совет.