【问题标题】:Only the first if is being evaluated in JSRender只有第一个 if 在 JSRender 中被评估
【发布时间】:2021-10-30 13:48:29
【问题描述】:

我有一个要在 JSRender 中呈现的对象。除了对我拥有的嵌套对象的评估之外,几乎所有东西都可以工作。

"traits": {
  "admin": true,
  "editor": true,
  "writer": true
}

它是我要发送到模板的较大对象的一部分。

我一直在尝试让 JSRender 根据特征在名称旁边显示一个图标。

{{if traits.admin}}
  <div class="icon iconadmin"></div>
{{/if}}
{{if traits.editor}}
  <div class="icon iconeditor"></div>
{{/if}}
{{if traits.writer}}
  <div class='icon iconwriter'></div>
{{/if}}

我尝试过使用{{if}} {{else }} 结构和{{for}} 循环,但在每种情况下,模板都只呈现用户在其特征对象中的第一个图标。

如果我切换代码,它将成功显示,例如,如果我移动测试以首先评估编辑器,则编辑器图标。

是我使用对象的问题吗?

【问题讨论】:

  • 该代码基本上没有问题。如果您将这三个 &lt;div&gt; 标记放在模板中,根本没有任何 if,您会看到所有三个图标吗?
  • 我明天试试
  • 因此,如果我将 div 从条件中拉出,它们都会出现,但在条件块内只会出现第一个。
  • 如果我将代码更改为使用对象traits之外的键/值对,它也不起作用

标签: jquery jsrender


【解决方案1】:

我可以使用 {{props}} 让代码工作

{{props traits}}
 {{if prop}}
    <div class="icon icon{{>key}}"></div>
  {{/if}}
{{/props}}

此时它将遍历traits 键中的属性,然后评估它们。

我将把它作为一个错误输入。

【讨论】:

    【解决方案2】:

    它对我来说可以正常工作:

    https://jsfiddle.net/BorisMoore/4cL5a0qv/

    如果我设置

    "admin": false,
    "editor":true,
    "writer": true
    

    那么这个模板:

    {{if traits.admin}}
      <div>ADMIN</div>
    {{else traits.editor}}
      <div>EDITOR</div>
    {{else traits.writer}}
      <div>WRITER</div>
    {{/if}}
    
    
    {{if traits.admin}}
      <div>ADMIN2</div>
    {{/if}}
    {{if traits.editor}}
      <div>EDITOR2</div>
    {{/if}}
    {{if traits.writer}}
      <div>WRITER2</div>
    {{/if}}
    

    输出:

    EDITOR
    EDITOR2
    WRITER2
    

    {{if}}...{{else}}... 将只为第一个真正的表达式输出一个块。

    {{if}}...{{/if}}会在每次表达式为真时输出

    如果它不适合你,你可以发布一个 jsfiddle...?谢谢。

    【讨论】:

    • 它并没有全部完成。如果我在你的小提琴中将所有值设置为 true,我会得到以下输出 ADMIN ADMIN2 EDITOR2 WRITER2 所以它跳过 Editor1 和 Writer1
    • 这就是它应该做的。 if a else b else c 将只输出第一个真值。 jsviews.com/#iftag:多个替代条件块:– 渲染第一个 {{if}} 或 {{else}} 表达式为真的块...
    • 在你的情况下,你不希望这样 - 所以只需使用三个 {{if}}...{{/if}} 块,没有 {{else}} - 如我的 jsfiddle 模板的第二部分。
    • 我会尝试设置一个小提琴来做一个测试用例,但我认为 github 上关于 {{ifelse}} 标签的部分辩论是它不是必需的。我想我只是不理解文档或讨论。
    • 好吧,我不知道现在到底发生了什么,但我回去删除了 {{props}} 代码并添加了连续的条件,它运行了。该模板使用了一些我没有在此处的示例中包含的 CSS 代码,它可能会导致显示问题。我确定我检查过。抱歉打扰了。从好的方面来说,我实际上对我用作“解决方案”的{{props}} 代码更满意。将其与视图集成。
    猜你喜欢
    • 2013-08-06
    • 2021-04-23
    • 2019-07-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多