javascript - 使用 InstantSearch.js 在运行时选择不同的模板

标签 javascript jquery instantsearch.js

我希望能够根据从搜索中检索到的值来更改模板。我想像这样改变变量内容:

search.addWidget(
  instantsearch.widgets.hits({
     container: '#hits',
     hitsPerPage: 12,
     templates: {
        empty: noResultsTemplate,
        item: hitTemplate
     },
     transformData: function (hit) {
        if (hit.myVariable == true) {
          this.templates.item = otherTemplateVariable;
        }
        return hit;
     }
  })
);

但我收到错误:“无法获取未定义或空引用的属性"template"”

最佳答案

问题似乎是您正在引用 this 并且指向没有 templates 属性的函数 transformData,请尝试提取您的对象来访问它:

var data = {
     container: '#hits',
     hitsPerPage: 12,
     templates: {
        empty: noResultsTemplate,
        item: hitTemplate
     },
     transformData: function (hit) {
        if (hit.myVariable == true) {
          //access the templates attribute
          data.templates.item = otherTemplateVariable;
        }
        return hit;
     }
  };

search.addWidget(
  instantsearch.widgets.hits(data)
);

关于javascript - 使用 InstantSearch.js 在运行时选择不同的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514476/

相关文章:

javascript - 为什么我在这个简单的组件中遇到 Angular 编译错误

css - 更改 Algolia React Instant Search 组件的样式

Javascript:如何从多行内容可编辑div的开头获取插入符偏移量

jquery - 删除点击事件的delay()

javascript - 如何成功通过控制台记录此 api 的数据?

javascript - 如何在 jquery 中重写 javascript 函数?

javascript - 使用 Algolia 进行 Hogan 模板化

javascript - 如何在javascript中为所有浏览器添加收藏夹/书签

javascript - 如何使用 ajax 和 get 请求将多个变量发送到 php 文件?