【问题标题】:JsRender if-else renders nothingJsRender if-else 什么都不渲染
【发布时间】:2014-01-15 01:31:30
【问题描述】:

我有一个简单的模型:

var model =  [{
    content: "",
    type: "photo",
    src: "xxx"
}, {
    content: "",
    type: "quote",
    text: "blah"
}];

还有一个简单的模板:

{{if type eq='photo'}}
    <img src="{{:src}}" />
    <div class="photo-caption">
        {{:caption}}
    </div>
{{else type eq='quote'}}
    <div class="quote-text">
        {{:text}}
    </div>
{{/if}}

问题是当type 是“引用”时,模板什么也不渲染。如果我将它稍微更改为两个ifs 而不是if-else,它会呈现报价,但也会呈现div class="photo-caption"&gt;。我需要它只渲染一个或另一个。我觉得这是一个简单的语法问题,但似乎无法在 JsRender 网站上找到足够的文档来说明如何正确完成。

Here's a fiddle。这两个模板应该表现得完全一样。相反,一个渲染两者,另一个只渲染图像。

【问题讨论】:

  • 如果你制作了一个 jsFiddle,你将有更好的机会得到帮助。

标签: javascript templates jsrender


【解决方案1】:

我明白了:

{{if type == 'quote' }}
    <div>
        {{: text }}
    </div>     
{{else type == 'photo'}}   
    <div> 
        {{: src }} 
     </div>   
{{/if}}

http://jsfiddle.net/4QzZX/2/

【讨论】:

  • 这里的文档:jsviews.com/#iftag 说“条件包含:- 仅当数据路径或表达式计算为时才呈现 {{if}} 标记(或引用的外部模板)的块内容真实('或真实')”。请参阅底部的示例:{{if members && members.length}}...{{else standby && standby.length}}...{{else}}...{{/if}}。您基本上可以使用任何 javascript 表达式...所以 {{if a someOtherFieldValue}}... 也可以...
  • 仅供参考:@BorisMoore JSRender 的作者。所以他很可能知道他在说什么。谢谢鲍里斯!
【解决方案2】:

当您尝试使用两个 if 语句的版本时,您是否记得除了将 {{else}} 更改为 {{if}} 之外,还添加了 {{/if}}

{{if type eq='photo'}}
    <img src="{{:src}}" />
    <div class="photo-caption">
        {{:caption}}
    </div>
{{/if}}
{{if type eq='quote'}}
    <div class="quote-text">
        {{:text}}
    </div>
{{/if}}

【讨论】:

  • @wtfsven:嗯,那很奇怪。也许您应该尝试创建一个小的可执行 JSFiddle 来重现您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多