我可以在jQuery模板自定义函数中访问当前元素吗?

时间:2011-09-09 00:41:25

标签: jquery jquery-templates

我刚开始使用jQuery templates

我有一个问题,文件无法回答我(还)。

我的模板是......

<script id="restaurant-review-template" type="text/x-jQuery-tmpl">
    <li>
        <span class="rating rating-${rating}">
            ${$item.getRating()}
        </span>
    </li>
</script>

...我的调用代码是......

$('#restaurant-review-template').tmpl(allRestaurants, {
    getRating: function() {
        // Is it possible to access the array element here?
        // Ideally, if `this` was the current array member...
        return new Array((this.rating || 0) + 1).join('*');
    }
}).appendTo('#cont')

jsFiddle

在我的allRestaurants数组中,我的对象具有rating属性,其中包含一个数字。

我想返回rating属性中数字的星号列表。例如,如果rating属性保留4,我想输出****

我知道我可以做点像......

allRestaurants = allRestaurants.filter(function(element) {
   element.asterixes = new Array((element.rating || 0) + 1).join('*');
   return true;
});

jsFiddle

...但我不想仅为模板使用额外属性来对数组进行规则。

因此,在如上所述的自定义模板函数中,有没有办法访问当前数组元素(我做console.log(this, arguments)并且看不到任何有用的东西)。

如果没有,实现这一目标的最简洁方法是什么?

1 个答案:

答案 0 :(得分:1)

基本上所有商品的数据都位于this.data,因此您可以使用this.data.rating达到评级值。

element.asterixes = new Array((this.data.rating || 0) + 1).join('*');