2013-07-19 2 views
1

, как говорит название, проблема ясна:JSrender: не может получить доступ к родительской переменной внутри, если условие

в строительстве:

{{if is_completed == 1}} 
<div> 
    <p>{{:#parent.parent.data.myproperty}}</p> 
</div> 
{{/if}} 

родительские свойства не видны!

Я решил это, создав такую ​​конструкцию, как: {{для фильмов ~ myproperty = myproperty}} в родительском цикле, и ~ myproperty видна внутри условий IF, но что, если у меня есть несколько переменных, что, если у меня есть многоуровневый структура вложенности данных?

ответ

5

{{if ...}} блок добавляет другой вид, так что означает, что необходимо добавить .parent активизировать через эту точку зрения, как в: {{:#parent.parent.parent.data.myproperty}}

Вы можете передать переменные, как вы сказали (~myproperty=...), и они будут видимый любой глубине гнездования.

Ваших переменные может быть объект слишком таким, как текущий объект данных: ~myObj=#data:

{{sometag a=b ~myObj=#data}} 
    .... 
    {{:~myObj.myproperty}} 
    ... 
{{/sometag}} 

так что вам не нужен отдельным переменным для каждого свойства.

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

{{:~root.foo...myproperty}}.

И, наконец, вы можете использовать #get("item") активизировать через любое количество {{if}} блоков и получить ближайший «пункт» вид (то есть вид элемента для повторяющегося {{for ...}} блока).

Так можно было бы написать:

{{:#get("item").data.myproperty}}

+0

Спасибо, Борис, ваши решения помогли. – Cassius

Смежные вопросы