代码之家  ›  专栏  ›  技术社区  ›  jonboy

三元运算符和Twitter Typeahead

  •  1
  • jonboy  · 技术社区  · 11 年前

    我正在与Twitter Typeahead合作,目前一切进展顺利。我可以将 可利用性 , 标题 , 著者 描述 在搜索建议中。现在,我只是试图向搜索栏中返回的文本添加一个css标签(成功/警告),但我不确定需要使用什么语法,例如;

    如果 可获得的 <span class="label label-success">available</span>

    如果 不可用的 <span class="label label-success">unavailable</span>

    json文件中的可用性字段返回1表示可用,0表示不可用。我尝试过如下语法,但它不起作用——它只是打印出html;

    available:  (available == 1) ? '<span class="label label-success">available</span>' : '<span class="label label-warning">unavailable</span>'
    

    在我的 typeahead.js类型 我使用以下模板显示结果;

    filter: function(list) {
      return $.map(list, function(book) { 
            return { 
            title: book.title,
            author: book.author,
            available: book.available,
            description: book.description
            }; 
        });
    }
    
    ...
    
    $('.demo .typeahead').typeahead(null, {
      displayKey: 'title', 
      engine: Handlebars,
      templates: {
        empty: [
          '<div class="empty-message">',
          'no results found',
          '</div>'
        ].join('\n'),
        suggestion: Handlebars.compile(
           '<p>{{available}}</p> \n\ //this is the line I want to add the label-badge to
            <p>{{title}}</p> \n\
            <p>{{author}}</p> \n\
            <p>{{description}}</p>'
            ) 
      },
      engine: Handlebars,
      source: books.ttAdapter()  
    });
    

    这里是JS的新手,所以任何建议都很感激。如果需要,我还可以提供更多代码。

    1 回复  |  直到 11 年前
        1
  •  1
  •   hutchonoid    11 年前

    您可以创建一个Book javascript对象,该对象包含以下逻辑:

    var Book = function(data)
    {
        self = this;
        self.title = data.title;
        self.author = data.author;
        self.available = data.available;        
        self.description = data.description;
        self.availableHtml = function()
        {
             return (self.available == 1) ? '<span class="label label-success">available</span>' : '<span class="label label-warning">unavailable</span>'   
        }
    }
    

    然后将其映射如下:

    filter: function(list) {
      return $.map(list, function(book) { 
            return new Book({ 
            title: book.title,
            author: book.author,
            available: book.available,
            description: book.description
            }); 
        });
    }
    

    并将您的手柄编译为:

    suggestion: Handlebars.compile(
           '<p>{{{availableHtml}}}</p> \n\ //this is the line I want to add the label-badge to
            <p>{{title}}</p> \n\
            <p>{{author}}</p> \n\
            <p>{{description}}</p>'
            ) 
    

    使现代化

    我想答案可能比我最初想的要简单。

    如果您只需要转义html,请使用三个括号,即。

    suggestion: Handlebars.compile(
       '<p>{{{available}}}</p> \n\ //this is the line I want to add the label-badge to
        <p>{{title}}</p> \n\
        <p>{{author}}</p> \n\
        <p>{{description}}</p>'
        )