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

как следует из названия, проблема ясна:

внутри конструкции:

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

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

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


person Cassius    schedule 19.07.2013    source источник


Ответы (1)


Блок {{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}}

person BorisMoore    schedule 19.07.2013
comment
Спасибо, Борис, ваши решения помогли. - person Cassius; 21.07.2013