【问题标题】:separating a field containing commas分隔包含逗号的字段
【发布时间】:2015-11-28 03:43:06
【问题描述】:

使用 handlebars.js 和 Behance API - {{user.sections.[availability]}} 输出 - Full-Time, Contract, Relocation

我希望将每个逗号分隔的单词作为其项目输出,类似于以下内容:

<ul>
  <li>Full-Time</li>
  <li>Contract</li>
  <li>Relocation</li>
</ul>

这会包括一些 Javascript 或 #each 语句吗?如果是这样,有人可以指导我找到一个有帮助的解决方案或 sn-p 吗?


对于那些问...这是我当前的 javascript 代码和 HTML。

(function() {
    var behanceUserAPI = 'http://www.behance.net/v2/users/' + userID + '?callback=?&api_key=' + apiKey;
    function setUserTemplate() {
        var userData = JSON.parse(sessionStorage.getItem('behanceUser')),
            getTemplate = $('#user').html(),
            template = Handlebars.compile(getTemplate),
            result = template(userData);
        $('body').html(result);
        // AUTO-TIME GREETING + COPYRIGHT -----------------------------------------
        var date = new Date();
        var time = date.getHours();
        var greeting = "";
        if (time < 12) {
            greeting = "Morning";
        } else if ((time >= 12) && (time < 19)) {
            greeting = "Howdy";
        } else {
            greeting = "Evening";
        }
        document.getElementById("greeting").innerHTML = greeting;
        document.getElementById("auto-year").innerHTML = "Copyright &copy; " + date.getFullYear();
    }
    if (sessionStorage.getItem('behanceUser')) {
        setUserTemplate();
    } else {
        $.getJSON(behanceUserAPI, function(user) {
            var data = JSON.stringify(user);
            sessionStorage.setItem('behanceUser', data);
            setUserTemplate();
        });
    }
})();

<ul class="availability">
  {{#splitSTring user.sections.[Availability] delimiter=", "}}
    <li><i class="icon-check twentytwo color"></i><span>{{this}}</span>   </li>
  {{/splitString}}
</ul>

【问题讨论】:

    标签: javascript handlebars.js behance-api


    【解决方案1】:

    根据实际问题进行编辑:

    您将要占用该字段并将其转换为数组。所以像

    var availabilities = user.sections.availability.split(',');
    
    //send availabilities to template
    

    然后在您的模板中,您可以将其打印为:

    {{#each availabilities as |time|}}
      <li>{{time}}</li>
    {{/each}}
    

    或者正如@isherwood 建议的那样,您可以注册一个 HandleBars 助手来为您执行此操作。

    【讨论】:

    • 如果模板像user.sections.availability.toString() 一样评估它,并且数组中的所有项目都是字符串,则它有可能打印为'item1,item2,item3'。
    • 抱歉,如果您在上下文中阅读了带有标题的整个问题,那么是的,我应该更清楚这是一个字符串字段。
    • 它不是一个数组......它只是文本字段中的文本。所以我需要一个代码来读取文本并根据逗号分隔每个项目。我认为...
    • developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 我认为可以做到。仅取决于您是要在控制器还是在模板级别进行拆分。
    【解决方案2】:

    注册一个助手并指定逗号空间作为分隔符。

    Handlebars.registerHelper("splitString", function(options){
          var ret = "";
    
          var tempArr = context.trim().split(options.hash["delimiter"]);
    
          for(var i=0; i < tempArr.length; i++)
          {
            ret = ret + options.fn(tempArr[i]);
          }
    
          return ret;
    });
    
    
    <ul>
      {{#splitSTring user.sections.[availability] delimiter=", "}}
      <li>{{this}}</li>
      {{/splitString}}
    </ul>
    

    More

    请注意,这是一个不完整的示例。我试图将它翻译成你的代码,但我没有全部。我建议从链接的示例开始。

    【讨论】:

    • 我将我当前的代码添加到我的原始帖子中。我试过你说的,但还是不行。我想现在我只是不确定在哪里以及如何将您的 sn-p 集成到我的代码中。
    • 现在有包含我完整代码的更新吗?我尝试了您的“更多”链接,并且能够使其正常工作,但是我不得不禁用部分代码,所以我不确定如何将它们组合在一起,因此您的代码可以与我的代码一起使用。跨度>
    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多