Функция JQuery не может быть вызвана в шаблоне Hogan?

Я хочу просто наложить одну часть изображения на другую. Ниже мое изображение: Изображение звезд

И сейчас у меня есть следующее:

HTML:

<script type="text/template" id="hit-template">
  {{#hits}}
  <div class="hit">
    <div class="hit-content">
      <h3 class="hit-name">Name</h3>
      <span class="stars">4.0</span> 
    </div>
  {{/hits}}
</script>

CSS:

.hit-content {
    font-size: 13px;
    display: inline-block;
    margin-left: 20px;
    vertical-align: top;
}

//This CSS class shows all the grey stars on my page
.hit .hit-content span.stars, span.stars span {
    height: 35px;
    width: 185px;
    display: inline-block;
    background: url('/resources/graphics/stars-icons.png') 0 0 repeat-x;
}

//This CSS class should be to show only the orange stars on my page
.hit .hit-content span.stars span {
    background: url('/resources/graphics/stars-icons.png') 0 -36px repeat-x;
    display: inline-block;
}

Могу ли я получить его так, чтобы я мог наложить оранжевые звезды на серые звезды, чтобы показать определенные звездные рейтинги?

Я пробовал:

Javascript:

$hits = $('#hits');
var hitTemplate = Hogan.compile($('#hit-template').text());
$hits.html(hitTemplate.render(content));


$.fn.stars = function() {
    return $(this).each(function() {
        // Get the value
        var val = parseFloat($(this).html());
        // Make sure that the value is in 0 - 5 range, multiply to get width
        var size = Math.max(0, (Math.min(5, val))) * 16;
        // Create stars holder
        var $span = $('<span />').width(size);
        // Replace the numerical value with stars
        $(this).html($span);
    });
}

$(function() {
    $('span.stars').stars();
});

По какой-то причине $('span.stars').stars(); вызов никогда не выполняется, и я не уверен почему. Может кто-нибудь объяснить мне, почему это происходит? Спасибо!

Изменить: Новая попытка с обещанием:

function renderHits(content) {
    var promise = new Promise(function(resolve, reject) {
        $hits.html(hitTemplate.render(content));
        resolve();
    });
    promise.then(function(val) {
        $('span.stars').stars();
    });
};
$.fn.stars = function() { 
  return this.each(function() {
    // Get the value
    console.log("HI");
    var val = parseFloat($(this).html()); 
    // Make sure that the value is in 0 - 5 range, multiply to get width
    var size = Math.max(0, (Math.min(5, val))) * 36.5; 
    // Create stars holder
    var $span = $('<span> </span>').width(size); 
    // Replace the numerical value with stars
    $(this).empty().append($span);
  });
}

0 ответов

Другие вопросы по тегам