jsRender как сделать логическое сравнение

Я пытаюсь сделать что-то очень простое — протестировать логическое значение из JSON в шаблоне jsRender.

ДАННЫЕ JSON:

{ ... "CanAdd": false, "CanDelete": false, "CanEdit": true, ... }

Шаблон:

{{if CanEdit === true}} СДЕЛАЙТЕ ЧТО-НИБУДЬ {{/if}}

Сгенерированный вывод не отображает «DO SOMETHING». Значение CanEdit в данных JSON равно true. Я пробовал CanEdit === "true", CanEdit == true, CanEdit == "true" и ничего не работает.

Что мне не хватает?

EDIT Вот мой полный шаблон:

            <section class="ManagePageContentSection">
            <h2>{{:PageTitle}} Page</h2>
            {{for SectionContentList}}
                <section class="PageSectionContent">
                    <h3>
                        {{:SectionName}} Section

                        {{if CanEdit === true}}
                            <span id="editPageSectionButton" class="editButton" title="Edit {{:SectionName}}">edit</span>
                        {{/if}}

                        {{if CanDelete === true}}
                            <span id="deletePageSectionButton" class="deleteButton" title="Delete {{:SectionName}}">delete</span>
                        {{/if}}
                    </h3>
                    {{if PageContentList.length > 0}}
                        <table class="PageContentTable">
                            <thead>
                                <tr>
                                    <th>Order</th>
                                    <th>Title</th>
                                    <th>Subtitle</th>
                                    <th>Summary</th>
                                    <th>Actions</th>
                                </tr>
                            </thead>
                            <tbody>
                                {{for PageContentList}}
                                <tr id="{{:ContentId}}">
                                    <td>{{:Ordinal}}</td>
                                    <td>{{:Title}}</td>
                                    <td>{{:SubTitle}}</td>
                                    <td>{{:Summary}}</td>
                                    <td>
                                        {{if CanEdit}}
                                            <span id="editPageSectionButton" class="editButton" title="Edit {{:Title}}">edit</span>
                                        {{/if}}
                                        {{if CanDelete}}
                                            <span id="deletePageSectionButton" class="deleteButton" title="Delete {{:Title}}">delete</span>
                                        {{/if}}
                                    </td>
                                </tr>
                                {{/for}}
                            </tbody>
                            <tfoot>
                            </tfoot>
                        </table>
                    {{/if}}
                </section>
            {{/for}}
        </section>

JSON

{

"AsOfDate": "/Date(1342800529826-0500)/",
"FullPageUrl": "/home/index",
"NavigationId": 7,
"NavigationName": "Home",
"PageContainerName": "ContentRenderedContainer",
"PageId": 2,
"PageName": "Home",
"PageTitle": "Home - Home",
"SectionContentList": [
    { … },
    { … }
],
"AddContentUrl": "",
"AddSectionUrl": "/PageSection/New/2",
"AdminTemplateName": "PageSectionContentTemplate",
"CanAdd": false,
"CanDelete": false,
"CanEdit": true,
"DeletSectioneUrl": "/PageSection/Delete",
"DeleteContentUrl": "",
"EditContentUrl": "",
"EditSectionUrl": "/PageSection/Edit"

}

Шаблон рендерится, за исключением логики вокруг CanEdit, CandDelete.

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

Еще раз спасибо за помощь.


person Tom Schreck    schedule 20.07.2012    source источник
comment
Насколько я могу судить по моему собственному опыту и демонстрациям, которые я видел, вы делаете это правильно. Я предполагаю, что то, что вы показываете, является лишь частью фактического шаблона, отображается ли остальная часть шаблона? Вы получаете какие-либо ошибки? Иногда что-то такое простое, как пустое пространство, может привести к поломке шаблона, поэтому может быть полезно опубликовать полный, фактический объект и шаблон JSON.   -  person MrOBrian    schedule 20.07.2012
comment
Работает на меня. Вы также можете написать {{if canEdit}} ... {{/if}}, чтобы проверить истинность. См. также пример и пример 2. Вы можете опубликовать упрощенную версию своего кода на jsfiddle и дать ссылку на нее отсюда, если она у вас не работает.   -  person BorisMoore    schedule 21.07.2012
comment
Вы пытаетесь получить доступ к CanEdit и CanDelete из {{for SectionContentList}} и {{for PageContentList}}, но они не являются объектами ни в SectionContentList, ни в PageContentList. @BorisMoore знает лучше меня, но я считаю, что вам нужно использовать #parent.data для доступа к этим объектам.   -  person MrOBrian    schedule 24.07.2012


Ответы (1)


{{if variable}} do something {{/if}}

Покажет «сделать что-нибудь», если «переменная» оценивается как истина.

Он не будет отображаться, если «переменная» равна нулю или оценивается как ложная.

Используйте !variable для проверки на ложь.

person kravits88    schedule 11.12.2013