javascript - Handlebars 增加档次

标签 javascript handlebars.js

我有以下 JSON:

 "daysRange": {
    "status": "UNSPECIFIED/ALL/SPECIFIED",
    "available": [
      {
        "id": "1",
        "name": "MONDAY"
      },
      {
        "id": "2",
        "name": "TUESDAY"
      },
      {
        "id": "3",
        "name": "WEDNESDAY"
      },
      {
        "id": "4",
        "name": "THURSDAY"
      },
      {
        "id": "5",
        "name": "FRIDAY"
      },
      {
        "id": "6",
        "name": "SATURDAY"
      },
      {
        "id": "7",
        "name": "SUNDAY"
      }
    ],
    "selected": [
      {
        "id": "2",
        "name": "TUESDAY"
      }
    ]
  }

我使用这样的 Handlebars 来生成 li:

     <ul class="available">
        {{#each daysRange.available}}
          <li data-id="{{this.id}}">{{this.name}}</li>
        {{/each}}
     </ul>  

问题:如何将所选类(class)添加到所选日期?如果有人能对此有所启发,我将不胜感激。

最佳答案

您需要在数据到达模板之前对其进行处理。在可用列表中标记选定日期,以便您可以在迭代期间对其进行测试。

  1. 将 JSON 解析为对象
  2. 遍历available列表并将ID与selected中的元素进行比较
  3. 类似的东西

    if (available[i].id === selected[j].id) 
        available[i].selected = true;`
    
<小时/>

您也可以使用自定义助手来完成此操作,但这对我来说似乎比仅仅更正数据更困惑:

Handlebars.registerHelper('isSelected', function(selected, options) {
    var ret = "";      
    if (this.id === selected[0].id) {
        ret = "selected";
    }
    return options.fn(ret);
});

然后在您的模板中,

 <ul class="available">
     {{#each daysRange.available}}
         <li data-id="{{this.id}}" class="{{#isSelected ../daysRange.selected}}{{this}}{{/isSelected}}">{{this.name}}</li>
     {{/each}}
 </ul> 

关于javascript - Handlebars 增加档次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18254688/

相关文章:

javascript - 当数据来自 API 时如何设置选定的特定值

javascript - 无法使用 javascript 填充 2 个下拉列表

javascript - 母版页不加载 css 文件

mysql - 使用Grunt将handlebar模板文件处理成mysql数据库

javascript - 使用 Jquery 显示和隐藏函数

JavaScript 启动和停止计时

javascript - 在 Handlebars 模板中渲染集合数据时出现问题

gruntjs - 将 Grunt 任务输出管道传输到另一个任务输入?

javascript - 将表单属性传递给部分

javascript - Handlebars - 通过嵌套的 each 中的外部键访问数组