Handlebars.Net с локальным путем к файлу - PullRequest
0 голосов
/ 01 мая 2018

У меня есть значение конфигурации, представляющее папку, в которой некоторые файлы доступны для скачивания. Это значение является шаблоном руля:

"D:\{{identifier1}}\{{identifier2}}\SomeFolder\{{version}}"

Это значение устанавливается для каждой среды нашим сервером развертывания.

Проблема в том, что когда я запускаю шаблон, как это:

var template = Handlebars.Compile(_configuration.FilePathFormat);

        return template(new
        {
            identifier1 = 123,
            identifier2 = 456,
            version = "latest"
        });

Результат, который я получаю, таков:

R:{{identifier1}}{{identifier2}}\SomeFolder{{version}}

Что я ожидаю:

R:\123\456\SomeFolder\latest

По какой-то причине он уходит от руля, и я этого не хочу. Мне не удалось найти что-либо при отключении escape-символов, и никакие косые черты не сработали для правильной визуализации шаблона.

Кроме того, если я поставлю пробел между косой чертой и местозаполнителем руля, он будет правильно скомпилирован и визуализирован, но затем в пути к файлу будет пробел.

Я нашел сайт, который позволяет мне тестировать handlebars.js , но он ведет себя не так, как handlebars.net

1 Ответ

0 голосов
/ 01 мая 2018

Обновление: исправлено в Handlebars.net

Sice версия 1.9.3, выпущенная сразу после того, как я сообщил об ошибке, теперь она работает просто отлично. Вы должны удвоить свои косые черты в шаблоне, чтобы избежать их для Handlebars.Net, так же как и для Handlebars.js,

var templateText = @"D:\\{{identifier1}}\\{{identifier2}}\\SomeFolder\\{{version}}";
var compiledTemplate = Handlebars.Compile(templateText);

var path = compiledTemplate(new
{
    identifier1 = 123,
    identifier2 = 456,
    version = "latest"
});

Оригинальный ответ: Да, похоже, в Handlebars.net есть странная обработка escape-символов.

Самый простой обходной путь - просто инвертировать косые черты в строке шаблона.

var templateText = @"D:/{{identifier1}}/{{identifier2}}/SomeFolder/{{version}}";
var compiledTemplate = Handlebars.Compile(templateText);

var pathWithInvertedSlashes = compiledTemplate(new
{
    identifier1 = 123,
    identifier2 = 456,
    version = "latest"
});
// Inverted slashes normally work fine on Windows, but if you want to
// 'fix' them you can always do
var canonicalPath = Path.GetFullPath(pathWithInvertedSlashes);
...