2012-07-20 52 views
1

我想要做一件非常简单的事情 - 在JsRender模板中测试一个来自JSON的布尔值。jsRender如何做布尔比较

JSON数据:

{ ... “CanAdd”:假的, “CanDelete”:假的, “CanEdit”:真实, ... }

Template:

{{if if CanEdit === true}} 做什么 {{/ if}}

生成的输出不显示“DO SOMETHING”。 CanEdit在JSON数据中的值为true。我尝试过CanEdit ===“true”,CanEdit == true,CanEdit ==“true”,没有任何作用。

我在想什么?

编辑 这里是我完整的模板:

  <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。也许我所做的事情太复杂了。也许模板应该只用于只读数据。

再次感谢您的帮助。

+0

据我所知,根据我自己的经验和演示,我已经看到,你做的是正确的。我假设你所展示的只是实际模板的一部分,模板的其余部分是否呈现?你有任何错误?有时候,像一个杂散空间这样简单的事情可能会导致模板中断,因此发布完整的实际JSON对象和模板可能会有所帮助。 – MrOBrian 2012-07-20 16:13:32

+2

适合我。你也可以写{{if canEdit}} ... {{/ if}} - 这将测试'truey'。另见[示例](http:// localhost:60288/jsrender/demos/step-by-step/04_if-else-tag.html)和[示例2](http://borismoore.github.com/jsrender/演示/一步一步/ 10_comparison-tests.html)。 如果你的代码不适合你,你可以将你的代码的简化版本发布到jsfiddle并从这里链接到它。 – BorisMoore 2012-07-20 20:05:59

+0

您正在尝试从{{{for SectionContentList}}和{{for PageContentList}}中访问“CanEdit”和“CanDelete”,但它们不是“SectionContentList”或“PageContentList”中的对象。 @BorisMoore比我更清楚,但我相信你需要使用'#parent.data'来访问这些对象 – MrOBrian 2012-07-23 22:54:06

回答

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

如果“变量”计算结果为真,将显示“执行某些操作”。

如果“变量”为空或计算结果为false,则不会显示。

使用!variable检查是否为false。