2014-11-21 6 views
0

Я пытаюсь получить значения в цикле из родительского контекста. Пыль может вызвать мой метод, но мой метод не может достичь моих свойств, которые я определил в классе, поскольку контекст является текущим.Пыль - как получить родительский контекст в цикле

Так, например:
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 "; 
}; 

My Dust

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

Проблема
Метод sayHello будет называться, как и ожидалось , но контекст - это текущий элемент вместо родителя. Таким образом, this соответствует текущему элементу, и, конечно, "Me".isAwesome всегда будет возвращать значение false. Как вы понимаете, я хотел бы быть потрясающим.

Вопрос
Как я могу добиться того, что 3 удивительных людей возвращаются пылью.

ответ

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 
} 
+0

Хм .. Это работает, но это означает, что моя модель должна знать, что DUST используется для рендеринга. Поэтому мой метод «sayHello» вызывает дополнительную озабоченность. Это означает, что я прикован к DUST, если я перехожу к этому подходу. – hwcverwe

+0

Это в основном потому, что у Пыли есть другая модель контекста, чем ванильный Javascript, так как вы можете иметь несколько иерархических уровней видимости и их искать с восходящего. – Interrobang

2

Вы могли пройти необходимую контекстную переменную в качестве параметра:

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

, а затем в функции помощника:

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

Да, здесь также, ваша функция будет иметь дополнительная забота (о присутствии DustJs).