【问题标题】:Difficulty with using contextual parameters in for loop, in JSRender在 JSRender 中的 for 循环中使用上下文参数有困难
【发布时间】:2020-09-13 22:53:24
【问题描述】:

我正在使用 JSRender 1.0.5,此页面上的文档:https://www.jsviews.com/#contextualparams 建议我可以这样做: “通过在任何块标签(例如 {{if}} 或 {{for}})上简单地写入 ~myValue=...(对于任何表达式)来定义上下文参数。”

但是当我在 for 循环中使用它时,我无法让它工作。我已经为此花费了数小时 - 非常令人沮丧。

{{for data.collection ~collectionIdx=#getIndex()}}
    <div id="someDiv">Index = {{:~collectionIdx}}</div>
{{/for}}

我真正想做的是将外循环的索引传递到内循环,但我什至无法让基本功能正常工作。如果我在循环内吐出{{:#getIndex()}},它工作正常——我只是不能将它分配给上下文参数。

解决方法是什么?

【问题讨论】:

    标签: for-loop parameters jsrender


    【解决方案1】:

    #index#getIndex() 返回 'item view' 的索引 - 当您的上下文位于循环数组的 {{for someArray}} 内时。

    但如果您不在循环内(通过数组),#indexundefined,因此呈现为空字符串...

    在您的示例中,您的上下文参数 ~collectionIdx=#getIndex() 位于外部上下文中,因此它存储值 undefined

    但如果你有嵌套循环,那么它会在适当的级别正确地呈现索引值:

    {{for outerArray}}
        {{for innerArray ~collectionIdx=#getIndex()}}
            <div>Outer Index = {{:~collectionIdx}}</div>
            <div>Inner Index = {{:#getIndex()}}</div>
        {{/for}}
    {{/for}}
    

    【讨论】:

    • 除非它没有。我已经尝试了一切。如果我在循环中引用 {{:#getIndex()}},它会给出索引。如果我尝试分配 ~collectionIdx=#getIndex(),它是空的。我什至尝试定义像 ~test="string" 和 {{:~test}} 这样的参数是空的。上下文参数根本没有获取任何值。当我查看编译后的模板时,我看到了 view.hlp("test") 之类的引用,就像它正在帮助程序中寻找它们一样。
    • 这是它不起作用的地方(#data 是一个对象):{{for outerArray}} {{for #data ~collectionIdx=#getIndex() tmpl="tpl-inner-template" /}} {{/for}} &lt;script id="tpl-inner-template" type="text/x-jsrender"&gt; &lt;div&gt;Outer index = {{:~collectionIdx}}&lt;/div&gt; &lt;/script&gt;
    • 第一件事——当你使用一个你还不太了解的平台,并且某些东西没有达到你的预期时,从假设你错过了什么开始,而不是声明平台本身不起作用。 (对不起,这样说其实既幼稚,又有点自大)。我将相应地更改此问题的标题。其次,如果你输入 `tmpl="#tpl-inner-template" 那么你的新样本就可以工作。 Here it is.
    • Ad hominems 不谈,你不知道我在其中使用 JSRender 的环境。我们有一个加载器,它加载模板文件并解析脚本标签以使用 $.templates(id, html );其中 id = 模板 id 和 html 是模板。因此, tmpl="tpl-inner-template" 工作,并且已经工作了几年。只是没有上下文参数。对我来说似乎是一个错误。如果我错了,请纠正我。
    • 我创建了一个 fiddle 来更好地说明我的用法......并且它有效。所以我深入挖掘,发现问题出在我正在使用的代码中。编写它的开发人员最初在 {{for}} 循环中渲染 UI,然后由于某种原因,在代码中,删除了每个渲染的实例并单独重新渲染它们,所以 #index 和 context 参数不存在- 这解释了为什么他们总是空的。所以,为任何冒昧道歉,但它看起来像一个错误是可以理解的。
    猜你喜欢
    • 2016-11-25
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多