DotLiquid / жидкий доступ к словарю - PullRequest
3 голосов
/ 16 ноября 2011

Я использую DotLiquid шаблонизатор и пытаюсь получить доступ к значению словаря в шаблоне.Я передал шаблону это падение:

public class SomeDrop : Drop
{
   public Dictionary<string, object> MyDictionary {get; set;}
}

var someDropInstance = SomeDrop 
{
   MyDictionary = new Dictionary<string, object> {{"myKey", 1}}
}

Template.NamingConvention = new CSharpNamingConvention();

var preparedTemplate = Template.Parse(template);
var templateOutput = preparedTemplate.Render(Hash.FromAnonymousObject(new { @this = someDropInstance }));

В шаблоне я не могу получить доступ к значению myKey как {{ this.MyDictionary.myKey }}, так и как {{ this.MyDictionary['myKey'] }}

Ответы [ 2 ]

6 голосов
/ 16 ноября 2011

Вам необходимо установить Template.NamingConvention перед созданием любых объектов перетаскивания. Из соображений производительности базовый Drop конструктор кэширует всех открытых элементов экземпляра, используя текущее соглашение об именах. Даже если вы затем измените соглашение об именах, эти кэшированные свойства не будут сброшены.

У меня работает этот код:

public class SomeDrop : Drop
{
    public Dictionary<string, object> MyDictionary { get; set; }
}

[Test]
public void StackOverflow()
{
    Template.NamingConvention = new CSharpNamingConvention();
    const string template = "{{ this.MyDictionary.myKey }}";

    var someDropInstance = new SomeDrop
    {
        MyDictionary = new Dictionary<string, object> { { "myKey", 1 } }
    };

    var preparedTemplate = Template.Parse(template);
    Assert.That(
        preparedTemplate.Render(Hash.FromAnonymousObject(new { @this = someDropInstance })),
        Is.EqualTo("1"));
}

Я признаю, что это что-то вроде ошибки - это не первый раз, когда эта проблема была поднята. Я еще не нашел удовлетворительного решения, но любые предложения приветствуются.

0 голосов
/ 16 ноября 2011

Просто получите доступ к нему, как MyDictionary["myKey"] или MyDictionary.TryGetValue("myKey", out result). Никаких дополнительных {{ }}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...