JsViews/JsRender temporary/contextual for 循环中的辅助变量

JsViews/JsRender temporary/contextual helper variable in for loop

我正在尝试将 temporary/contextual 变量存储在一个 for 循环中,以便稍后在另一个 for 循环中使用。我用了http://borismoore.github.io/jsrender/demos/step-by-step/11_accessing-parent-data.html作为参考。

{^{for instances ~templateId=templateId}}
    {{:~templateId}}
    <select data-link="templateId" class="selected-visible" name="select-template">
        {^{for ~root.templates}}
            <option data-link="{:name} value{:id} selected{:id == ~templateId}"></option>
        {{/for}}
    </select>
{{/for}}

实例数组中的每个数据对象都有一个设置为特定值的模板 ID 属性,模板数组中的每个对象都有一个 ID 属性。

第一个问题是我的调试 {{:~templateId}} 没有出现。似乎没有分配变量。

仅在模板标记中使用 ~helper 集后,我尝试在我的 "viewmodel" 中使用

显式定义 helper
$.views.helpers({templateId: 0});

现在当我没有在 for 循环中设置它时打印该值,但是当我在 for 循环中设置它时它又消失了。

下一个问题可能是 ~templateId 助手在 ~root 范围的 for 循环中不可用,因为助手应该只在实例循环的子视图中可用?

最终目标是selectselect中的正确值,所以如果有其他解决方案,请告知。

您需要从模板中删除 ~templateId=templateId...

解释:

语法~helper用于访问helpers/contextual参数,可以或者从外部传递in/registered,如下所示http://www.jsviews.com/#helpers, or can be created/set within a template, as in the example you linked to {{for movies ~theater=theater}} , or in this one: ~frstNm=firstName: http://www.jsviews.com/#samples/jsr/paths.

因此,通常您要么传入一个助手,要么在模板中创建它——不能同时使用。

在上面的示例中,您首先将 ~templateId 作为 0 传递 - 然后您 将其重新定义为上下文参数 ,使用 ~templateId=templateId(实际上是将其值设置为 undefined,因为 ...=templateId 将其设置为 templateId [=当前数据的 41=] - 未定义,在你的情况下)。