随时随地更改 underscore.js 模板变量

Change underscore.js template variable on the go

我想更新模板变量的值,以便在用户单击它时发生变化,从而更改页面上的数据。

<script type="text/template" id="graph-template">
<% _.each(results, function(results) { %>
     <ul class="barGraph">
        <li>
            <div class="left"><p><%= results.title %></p></div>
            <div class="right">

            <!-- THIS SHOULD CHANGE TO results.views if I statement is true without reloading data -->
            <span class="bar" style="width: <%= Math.floor(results.totalCount / 1000) %>%;">
                Total Views: <%= results.totalCount %>
            </span>
            <!-- THIS SHOULD CHANGE TO results.views if I statement is true -->

            </div>
        </li>
     </ul>
<% }); %>
</script>


$('input[name="views"]').change(function(e) { 
    if( $(this).val() == 'total') {
        resultsTemplating(sortByCount);
    } else {
        resultsTemplating(sortByAverage);
    }
});

在那种情况下,我会为结果集合中的每个项目添加一些 ID,并根据它们更新项目。在进行任何更改后,模板应使用新数据进行更新并再次插入。

这是 click 的示例,但您可以更改它

var results = [
    { id: 1, title: 'Some title', totalCount: 2},
    { id: 2 ,title: 'Another title', totalCount: 3},
    { id: 3, title: 'Another title', totalCount: 4}
];

var compiled = _.template($('#graph-template').html());
$('#app').html(compiled({results: results}));

$('body').on('click', '.js-value', function() {
    var $el = $(this);
    _.each(results, function(item) {
        if (item.id == $el.data('index')) {
            item.totalCount += +$el.attr('value');
        }
    });
    results = _.sortBy(results, 'totalCount');
    $('#app').html(compiled({results: results}));
});

并查看 fiddle http://jsfiddle.net/shurshilin/kxk1Lhkf/1/

如果您有任何问题,请随时提出,因为我可能不正确地理解您的问题。