如何在ractive.js中获取命名循环变量?

时间:2015-07-22 01:28:03

标签: ractivejs

在Python中,迭代为我提供了一个命名变量:

for cage in cages:
    for animal in cage.animals:
        print("The current cage is",cage)
        print("the current animal is",animal)

在Ractive模板中,我似乎无法执行此操作。

{{#cages}}
    {{#animals}}
         The current animal is {{.}} or {{this}},
         but I don't know how to refer to the current cage,
         i.e. the outer loop variable

         I would like to be able to say {{cage}} has an {{animal}}
    {{/animals}}
{{/cages}}

有没有我不知道的语法?

2 个答案:

答案 0 :(得分:5)

我想知道是否应该添加{{#each cage in cages}}{{#each cages as cage}}语法来处理这类案例。取而代之的是,mknecht的答案是完全有效的,而且我经常使用自己的东西;另一种方法是创建一个索引引用,如下所示:

{{#each cages :c}}
  {{#each animals}}
    The current animal is {{this}}, the current cage
    is {{cages[c]}}
  {{/each}}
{{/each}}

与此方法的不同之处在于双向绑定仍然有效(尽管在这种情况下听起来不像是一个问题。)

答案 1 :(得分:4)

没有明确的语法,afaik,但您可能(误)使用aliases:例如,您创建了一个新的上下文,将var result = new[] {4, 5} .Select(d => new { Divider = d, Values = numbers.Where(n => n % d == 0).ToList() }); 重命名为.。它看起来像这样:

cage

完整版本为on JSFiddle

Mis 使用,因为在Ractive中,您通常使用当前上下文对象的属性而不命名上下文对象本身。这在嵌套的情况下也可以正常工作。因此,没有这方面的语法。

别名确实有意义:名字阴影。如果您需要访问与内部循环中的动物属性同名的cage-property,则别名将起作用。两者都是demonstrated in another fiddle