灰尘 - 如何在循环中获取父上下文

时间:2014-11-21 17:44:27

标签: javascript dust.js

我正在尝试从父上下文中循环检索值。 Dust能够调用我的方法,但我的方法无法访问我在类中定义的属性,因为上下文是当前项。

所以例如:
JavaScript类

MyNamespace.MyClass = function () {
   this.names= ["Me", "You", "StackOverflow"];
   this.isAwesome = true;
};

MyNamespace.MyClass.prototype.sayHello = function() {
   if(this.isAwesome) {
      return "Hello awesome ";
      // This code will never be reached due to 'this' is one of the items from the array
   }
   return "Hello "; 
};

我的尘埃

{#names}{sayHello} {.}{~n}{/names}

问题
sayHello方法将按预期调用,但上下文是当前项而不是父项。因此this等于当前项目,当然"Me".isAwesome将始终返回false。正如你所理解的那样,我想要很棒。

问题
我怎样才能实现那3个令人敬畏的人被灰尘归还。

2 个答案:

答案 0 :(得分:3)

您可以将所需的上下文变量作为参数传递:

{#names myvar=parentContextVariable}{sayHello x=myvar} {.}{~n}{/names}

然后,在辅助函数中:

"sayHello": function(chunk, context, bodies, params) {
    //use params.x
}

是的,在这里,你的功能将有额外的关注(DustJs的存在)。

答案 1 :(得分:1)

使用Dust调用函数时,将使用参数chunk, context, bodies, params调用该函数。

您可以调用context.get(name)在上下文堆栈中搜索所需的变量。

{
  "sayHello": function(chunk, context, bodies, params) {
    if(context.get("isAwesome")) {
      return "Hello awesome";
    }
    return "Hello";
  },
  "names": ["One", "Two", "Three"],
  "isAwesome": true
}