Вы очень близки в своем нижнем примере! Чтобы создавать страницы на статических маршрутах, я обычно использую тот же код, который вы указали в своем вопросе. Чтобы вернуть страницу из вашего apos.app.get, вы должны сделать что-то вроде этого:
self.apos.app.get('/account/profile', function(req, res){
// Place any data you need to access in your template here:
req.data = {};
// self.sendPage is what will actually return the page and render the template 'profile.html' in your views folder.
// You can change 'profile' to the name of your template minus '.html' - e.g. 'page.html' would just be 'page'
return self.sendPage(req, 'profile', {});
});
Часть, которую вы пропустили, похоже, sendPage. Этот метод фактически отображает страницу, используя шаблон, указанный во втором аргументе метода.
Если вы добавите это в свой метод построения, у вас будет новый маршрут на вашем сайте, доступ к которому вы сможете получить, перейдя в / account / profile. Он отобразит шаблон, расположенный в папке представлений вашего модуля.
Я первоначально нашел эту информацию на этой странице:
https://apostrophecms.org/docs/technical-overviews/how-apostrophe-handles-requests.html
в разделе «Отображение полной HTML-страницы из маршрута».
Для дальнейшего использования вот то, как я решил его:
// Make owner-drawn to be able to give different alignments to single subitems
lvResult.OwnerDraw = true;
...
// Handle DrawSubItem event
private void lvResult_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
// This is the default text alignment
TextFormatFlags flags = TextFormatFlags.Left;
// Align text on the right for the subitems after row 11 in the
// first column
if (e.ColumnIndex == 0 && e.Item.Index > 11)
{
flags = TextFormatFlags.Right;
}
e.DrawText(flags);
}
// Handle DrawColumnHeader event
private void lvResult_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
// Draw the column header normally
e.DrawDefault = true;
e.DrawBackground();
e.DrawText();
}
Было необходимо обработать DrawColumnHeader, иначе никакой текст или разделители столбцов не будут оттянуты.
Класс "ColumnHeader" имеет свойство "TextAlign", которое изменит выравнивание для всех подэлементов в столбце. При необходимости в чем-то более необычном, Вы могли бы всегда использовать событие "DrawSubItem" и делать его владельцем оттянутый.