【问题标题】:Access parent data in nested array rendering with handlebars使用把手访问嵌套数组渲染中的父数据
【发布时间】:2016-02-26 15:59:07
【问题描述】:

我有以下数据结构:

A : 
{
  "B": [
    {
      "C":["Hello", "World"]
    }
  ]

}

A 有一个属性 B,它是一个数组。 B 的每个元素都有一个属性 C,它又是一个数组。

<template name="render">
{{#each B}}
{{#each C}}
<div class="clickme">{{this}}</div>
{{/each}}
{{/each}}
</template>

所以现在我有了一个事件处理程序,我想在其中访问 B 的元素,其中呈现了“this”(== C 的元素)。但是这似乎是不可能的。我该怎么做?

Template.render.events({
    "click .clickme" : function (event, template) {
         //template.data == A
         //Template.parentData(0) == A
         //Template.parentData(1) == A
         console.log("what was my parent B?");
    }
})

【问题讨论】:

    标签: javascript meteor handlebars.js


    【解决方案1】:

    您可以使用../ 向上移动多个级别 在您的情况下,假设您想要父元素的索引,然后:
    {{@../index}}
    要访问父元素的另一个键(不适用于您的情况):
    {{../key}}
    参考:
    Access properties of the parent with a Handlebars 'each' loop
    Handlebars.js: How to access parent index in nested each?

    编辑:要从“click .clickme”事件处理程序访问父元素,我不知道从事件处理程序访问的直接方法,但一种可能的方法是在 html 中创建一个 onclick 事件,并调用一个函数,您可以将父元素(或其索引)作为参数传递给它。在函数中,set 是一个会话变量,然后可以在“click.clickme”事件处理程序中引用。

    模板:

     <template name="render">
        {{#each B}}
        {{#each C}}
        <div class="clickme" onclick="onclickfunction('{{@../index}}')">{{this}}</div>
        {{/each}}
        {{/each}}
        </template>
    

    在客户端javascript中,定义一个函数:

    onclickfunction = function(parentindex) {
    Session.set('indexofparent',parentindex);
    }
    

    在“click .clickme”事件处理程序中,获取会话变量:

    Template.render.events({
        "click .clickme" : function (event, template) {
             //template.data == A
             //Template.parentData(0) == A
             //Template.parentData(1) == A
             var parentelement = Session.get('indexofparent');
             console.log(parentelement);//Shows index of B.
        }
    })
    

    附: B的索引是一个字符串,使用pareseInt(parentelement)解析成整数。

    【讨论】:

    • 谢谢,但我想我还不够清楚:我想在“click .clickme”事件处理程序中访问父级
    • 我已经编辑了答案,请告诉我它是否有效,如果这里或那里有轻微的语法错误,请修复它并告诉我,以便我可以更正。
    • 我没有尝试你的新答案,因为它比我做的更难。您依赖于事件处理程序在“onClick”函数之后执行。我所做的只是将 div 的data-index 设置为@../index 并通过$(event.currentTarget).data('index') 获取索引。如果你把这个放在你的答案中,我会接受。
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2018-03-05
    • 2018-08-04
    相关资源
    最近更新 更多