javascript - 在 Handlebars 中分配一个变量

标签 javascript handlebars.js bigcommerce

我在大型商业的模板平台上工作。该平台使用 handlebars 语法。我需要能够根据我的 URL 中的一个参数设置一个值,更像是“window.location.pathname”,并且我需要能够跨站点访问这个新变量。我能够使用常规 JavaScript 使某些东西以两种不同的方式工作,但我不想在整个站点的每个地方都重新创建我的脚本。所以基本上,我可以使用一些帮助将我的 2 个原始脚本之一放入 Handlebars 中以进行格式化。我的工作原理如下所示:

<p id="BrandLogo"></p>
<script>
    var directory = window.location.pathname;
    var branding;
    var str = directory.includes("blackvue");
    if (str === false) {
        branding = value one;
    } else {
        branding = value 2
    }
    document.getElementById("BrandLogo").innerHTML = branding;
</script>

<p id="BrandLogo"></p>
<script>
    var directory = window.location.pathname;
    var branding;
    if (str == '/URL-I-Want-To-Focus-On/') {
        branding = value one;
    } else {
        branding = value 2
    }
    document.getElementById("BrandLogo").innerHTML = branding;
</script>

提前致谢

最佳答案

如果您尝试在 Handlebars 中设置和使用局部变量,请尝试如下操作:

首先,创建一个名为“setVar”的辅助函数:

var handlebars = require('handlebars');
handlebars.registerHelper("setVar", function(varName, varValue, options) {
  options.data.root[varName] = varValue;
});

接下来,使用您在第一步中创建的函数设置您的变量。

{{setVar "greeting" "Hello World!"}}
{{#if some-condition}}
    {{setVar "branding" "Value one"}}
{{else}}
    {{setVar "branding" "Value 2"}}
{{/if}}

最后,在您的页面上使用变量:

<div>
  <h1 id="BrandLogo">{{greeting}}</h1>
</div>

document.getElementById("BrandLogo").innerHTML = {{branding}};

关于javascript - 在 Handlebars 中分配一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45241022/

相关文章:

javascript - 当我认为 Meteor 不应该重新渲染 View 时,如何防止 Meteor 在 html select dom click 事件上重新渲染 View ?

php - 大商务 API。如何创建购物车以及如何使用通配符搜索客户

javascript - JQuery-使用 Var 提交表单

javascript - 使用 RegEx 查找用引号和等号括起来的字符串

handlebars.js - Handlebars 在编译模板时解析错误

jquery - 通过 AJAX 调用 BigCommerce API 时出现 401 错误

javascript - 在黑色背景外单击时关闭流行通讯表单?

javascript - 单击图像的一部分重定向到许多网址

javascript - 如何将链接样式表添加到 document.write

javascript - require-handlebars-plugin 构建错误 - ReferenceError : _ is not defined