Использование jsViews/jsRender со свойством, перенастроенным как записи словаря

Мне было интересно, почему я не могу понять это правильно. У меня есть JSONResult в MVC, возвращающий коллекцию объектов «Задание». Одним из свойств объектов «Работа» является Словарь. Кажется, я не могу понять, как добавить это в шаблон сущности «Работа», чтобы отображать все значения для внутреннего шаблона. Текущий дизайн объекта будет заданием, и каждое задание имеет словарь фаз задания. Следующий код - это то, что я сейчас использую:

Job.cs

  public string Id { get; set; }
    public string Name { get; set; }
    public string CustomerName { get; set; }
    public string Phase {get;set;}
    public string PhaseText { get; set; }
    public Dictionary<String,String> Codes { get; set; }

Скрипт на стороне клиента:

<script id="jobLevelTmpl" type="text/x-jsrender">
        <tr class="row-header">
            <td class="col-lg-1">{{:Id}}</td>
            <td class="col-lg-4">{{:Name}}</td>
            <td class="col-lg-1" title="Status code: '{{:Phase}}'">{{:PhaseText}}</td>
            <td class="col-lg-1"><a jobid="{{:Id}}">View Job Details</a></td>
            <td class="col-lg-1">
                <div class="dropdown">
                    <button class="btn btn-warning dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">
                        Phase
                        <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
                        {{for Codes}}
                           <!-- This is where I do not know what to call or how to call the key or value of the dictionary items -->                            
                           <li role="presentation" class="dropdown-header">{{>code}}</li>
                        {{/for}}
                   </ul>              
               </div>
            </td>
            <td class="col-lg-1"><a href="javascript:function(){return false;}" jobid="{{:Id}}" class="btn btn-info expand-job">Update</a></td>
        </tr>
        <tr>
            <td class="col-lg-12 details-info" style="display:none;">
                <a href='#' onclick='parent.$.colorbox.close(); return false;' style="float:right;">Close</a>

            </td>
        </tr>      
    </script>

person Casey    schedule 11.03.2015    source источник


Ответы (1)


Если JSON на стороне клиента для Codes соответствует простому объекту JavaScript со строковыми значениями, то вы можете использовать {{props}} для перебора свойств, например:

<ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
    {{props Codes}}
        <li role="presentation" class="dropdown-header">Key: {{>key}} Value: {{>prop}}</li>
    {{/props}}
</ul> 

См. http://www.jsviews.com/#propstag.

person BorisMoore    schedule 11.03.2015
comment
Круто, и извините за задержку. Я потерял сознание вскоре после того, как был задан вопрос. Я пробовал именно это, за исключением того, что я забыл символы большего размера, но это открывает гораздо больше возможностей, которые я могу теперь сделать с этим. Еще раз спасибо как всегда! Продолжайте в том же духе. - person Casey; 11.03.2015