Javascript algolia中基于小胡子的逻辑结果

Javascript algolia中基于小胡子的逻辑结果,javascript,mustache,algolia,Javascript,Mustache,Algolia,如果我有一个moustach属性,比如说{{{stockvalue}},并且我希望根据{{stockvalue}}的值在周围的div中使用不同的类,那么说: <div class="label-success">{{stockvalue}}</div> 这个javascript提取stockvalue数据并将其应用到html中,但我认为没有办法对stockvalue变量进行任何逻辑处理,因为它在这个javascript中从未出现过。您不能在MustacheJs中使用三元

如果我有一个moustach属性,比如说
{{{stockvalue}}
,并且我希望根据
{{stockvalue}}
的值在周围的div中使用不同的类,那么说:

<div class="label-success">{{stockvalue}}</div>

这个javascript提取stockvalue数据并将其应用到html中,但我认为没有办法对stockvalue变量进行任何逻辑处理,因为它在这个javascript中从未出现过。

您不能在
MustacheJs
中使用三元运算符,因为它是无逻辑的。但是,有几个选项,或者根据对象的值向对象中添加值,然后将其呈现为
class=“{{className}}”
或类似的形式。。。或者在呈现视图后使用javascript,如下所示

选项1。。。(记住在mustache对象中包装变量!这是一个逻辑示例!)

查看

<div class="{{class}}">{{stockvalue}}</div>
选择2

查看

<div id="rendered">{{stockvalue}}</div>

不能在
MustacheJs
中使用三元运算符,因为它是无逻辑的。但是,有几个选项,或者根据对象的值向对象中添加值,然后将其呈现为
class=“{{className}}”
或类似的形式。。。或者在呈现视图后使用javascript,如下所示

选项1。。。(记住在mustache对象中包装变量!这是一个逻辑示例!)

查看

<div class="{{class}}">{{stockvalue}}</div>
选择2

查看

<div id="rendered">{{stockvalue}}</div>

因此,您的胡须数据对象定义如下:

var mustacheData = {"stockvalue":50}
mustacheData['stockvalue_class'] = function(){ 
    if ( this['stockvalue'] > 0 ) { return "label label-success"; }
    else { return "label"; }
}
然后在HTML模板中执行以下操作:

<div class="{{stockvalue_class}}">{{stockvalue}}</div>
{{stockvalue}

因此,您的胡须数据对象定义如下:

var mustacheData = {"stockvalue":50}
mustacheData['stockvalue_class'] = function(){ 
    if ( this['stockvalue'] > 0 ) { return "label label-success"; }
    else { return "label"; }
}
然后在HTML模板中执行以下操作:

<div class="{{stockvalue_class}}">{{stockvalue}}</div>
{{stockvalue}

这两个答案都是解决问题的很好的基础,您唯一缺少的是将其与instantsearch.js集成的方法

下面介绍如何使用
transformData
widget选项执行此操作,该选项允许您在渲染之前根据模板需求调整点击数据:

search.addWidget(
  instantsearch.widgets.hits({
      container: '#hits',
      hitsPerPage: 5,
      transformData: {
        item: function(hit) {
          hit.stockValueClass = hit.stockvalue > 0 ? 'label-success' : 'label';
          return hit;
        }
      },
      templates: {
          item: getTemplate('hit'),
          empty: getTemplate('no-results')
    }
  })
);
然后,您可以在模板中使用
stockValueClass
值:

<div class="{{stockValueClass}}">{{stockvalue}}</div>
{{stockvalue}

这两个答案都是解决问题的很好的基础,您唯一缺少的是将其与instantsearch.js集成的方法

下面介绍如何使用
transformData
widget选项执行此操作,该选项允许您在渲染之前根据模板需求调整点击数据:

search.addWidget(
  instantsearch.widgets.hits({
      container: '#hits',
      hitsPerPage: 5,
      transformData: {
        item: function(hit) {
          hit.stockValueClass = hit.stockvalue > 0 ? 'label-success' : 'label';
          return hit;
        }
      },
      templates: {
          item: getTemplate('hit'),
          empty: getTemplate('no-results')
    }
  })
);
然后,您可以在模板中使用
stockValueClass
值:

<div class="{{stockValueClass}}">{{stockvalue}}</div>
{{stockvalue}

Hi,这两种解决方案都表明我可以在javascript中使用stockvalue,我似乎不太清楚如何使用instantsearch.js(我忘了提到我正在使用的instantsearch.js)填充该变量我已经添加了一些关于在问题中使用algolia instantsearch的问题的更多信息。抱歉@MattLuccasPhaureJensen,我不熟悉这个框架。我能给出的唯一建议是确定如何从agolia捕获响应并将其分配给控制器中的值。嗨,这两个解决方案都表明我可以在javascript中使用stockvalue,我似乎并不完全清楚如何使用instantsearch.js(我忘了提到我正在使用的)填充该变量我已经添加了一些关于在问题中使用algolia instantsearch的问题的更多信息。抱歉@MattLuccasPhaureJensen,我不熟悉这个框架。我能给出的唯一建议是确定如何捕获agolia的响应,并将其分配给控制器中的值。我详细说明了问题,以便您可以看到我可能无法使用您的解决方案。我详细说明了问题,以便您可以看到我可能无法使用您的解决方案。