Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Helper in Loop Always Appears to be at the End #1849

Open
slarti-b opened this issue Apr 8, 2022 · 2 comments
Open

Helper in Loop Always Appears to be at the End #1849

slarti-b opened this issue Apr 8, 2022 · 2 comments

Comments

@slarti-b
Copy link

slarti-b commented Apr 8, 2022

I am trying to "group" the output by not repeating the value of a given field if it hasn't changed. I would rather avoid re-implementing the whole #each helper, so I thought that I could do a helper that would look at a previous row. However, the context I get inside such a helper doesn't appear to either include the array currently being looped or the position! I can pass in the @index for the latter, but where is the object being looped?

I've defined a dummy helper that just outputs the arguments. Tried calling both as block and normal helper. No luck. See https://jsfiddle.net/sempuzac/1/

E.g. given a data set (I know the data set is already sorted)

{
  "summary": {
    "foo": "A"
  },
  "names": [
    {
      "firstName": "Foo",
      "lastname": "Bar",
      "team": "red"
    },
    {
      "firstName": "Joe",
      "lastname": "Blogs",
      "team": "red"
    },
    {
      "firstName": "Anne",
      "lastname": "Other",
      "team": "green"
    },
    {
      "firstName": "Someone",
      "lastname": "Else",
      "team": "black"
    },
    {
      "firstName": "Last",
      "lastname": "Person",
      "team": "black"
    }
  ]
}

If I do {{#each names}} and put my new helper inside the loop then

  • I have the current row as this - OK
  • But _parent in the context is just the root element
    • If this is the row then the parent should be the names array, shouldn't it
    • How do I find out what element is being iterated? I could pass in @index and subtract one inside my Helper if I knew that
  • Every call to my helper includes a data element like the below - shouldn't it have the correct index for the row I call it from?
data:
  first: false
  index: 4
  key: 4
  last: true

Example of What I'm Trying to Do

Essentially, I can generate the following

Team   Name
red 0 Foo Bar
red 1 Joe Blogs
green 2 Anne Other
black 3 Someone Else
black 4 Last Person

What i want to generate is the following

Team   Name
red 1 Foo Bar
  2 Joe Blogs
green 1 Anne Other
black 1 Someone Else
  2 Last Person
@jaylinski
Copy link
Member

Does this only happen in strict-mode? (If yes, probably related to #1855)

@jaylinski
Copy link
Member

shouldn't it have the correct index for the row I call it from?

Yes, it should have. I'm not sure why this works in the playground but not in the jsfiddle... 🤔

https://handlebarsjs.com/playground.html#format=1&currentExample=%7B%22template%22%3A%22%3Ctable%3E%5Cn%5Ct%3Cthead%3E%5Cn%20%20%5Ct%3Ctr%3E%20%20%20%20%5Ct%5Cn%20%20%20%20%5Ct%3Cth%3ETeam%3C%2Fth%3E%5Cn%20%20%20%20%20%20%3Cth%3E%3C%2Fth%3E%5Cn%20%20%20%20%20%20%3Cth%3EName%3C%2Fth%3E%5Cn%20%20%20%20%3C%2Ftr%3E%5Cn%20%20%3C%2Fthead%3E%5Cn%20%20%3Ctbody%3E%5Cn%20%20%7B%7B%23each%20names%7D%7D%5Cn%20%20%5Ct%3Ctr%3E%5Cn%20%20%20%20%5Ct%3Ctd%3E%7B%7Bteam%7D%7D%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3E%7B%7B%20%40index%20%7D%7D%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3E%7B%7BfirstName%7D%7D%20%7B%7Blastname%7D%7D%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%7B%7Btest%20this%7D%7D%5Cn%20%20%20%20%3Ctr%3E%5Cn%20%20%7B%7B%2Feach%7D%7D%5Cn%20%20%3C%2Ftbody%3E%5Cn%3C%2Ftable%3E%22%2C%22partials%22%3A%5B%5D%2C%22input%22%3A%22%7B%5Cn%5Ct%5C%22summary%5C%22%3A%20%7B%5Cn%20%20%5Ct%5C%22foo%5C%22%3A%20%5C%22A%5C%22%5Cn%20%20%7D%2C%5Cn%20%20%5C%22names%5C%22%3A%20%5B%5Cn%20%20%5Ct%7B%5Cn%20%20%20%20%5Ct%5C%22firstName%5C%22%3A%20%5C%22Foo%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22lastname%5C%22%3A%20%5C%22Bar%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22team%5C%22%3A%20%5C%22red%5C%22%5Cn%20%20%20%20%7D%2C%5Cn%20%20%20%20%7B%5Cn%20%20%20%20%5Ct%5C%22firstName%5C%22%3A%20%5C%22Joe%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22lastname%5C%22%3A%20%5C%22Blogs%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22team%5C%22%3A%20%5C%22red%5C%22%5Cn%20%20%20%20%7D%2C%5Cn%20%20%20%20%7B%5Cn%20%20%20%20%5Ct%5C%22firstName%5C%22%3A%20%5C%22Anne%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22lastname%5C%22%3A%20%5C%22Other%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22team%5C%22%3A%20%5C%22green%5C%22%5Cn%20%20%20%20%7D%2C%5Cn%20%20%20%20%7B%5Cn%20%20%20%20%5Ct%5C%22firstName%5C%22%3A%20%5C%22Someone%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22lastname%5C%22%3A%20%5C%22Else%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22team%5C%22%3A%20%5C%22black%5C%22%5Cn%20%20%20%20%7D%5Cn%20%20%20%20%2C%5Cn%20%20%20%20%7B%5Cn%20%20%20%20%5Ct%5C%22firstName%5C%22%3A%20%5C%22Last%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22lastname%5C%22%3A%20%5C%22Person%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22team%5C%22%3A%20%5C%22black%5C%22%5Cn%20%20%20%20%7D%5Cn%20%20%5D%5Cn%7D%22%2C%22output%22%3A%22%3Ctable%3E%5Cn%5Ct%3Cthead%3E%5Cn%20%20%5Ct%3Ctr%3E%20%20%20%20%5Ct%5Cn%20%20%20%20%5Ct%3Cth%3ETeam%3C%2Fth%3E%5Cn%20%20%20%20%20%20%3Cth%3E%3C%2Fth%3E%5Cn%20%20%20%20%20%20%3Cth%3EName%3C%2Fth%3E%5Cn%20%20%20%20%3C%2Ftr%3E%5Cn%20%20%3C%2Fthead%3E%5Cn%20%20%3Ctbody%3E%5Cn%20%20%5Ct%3Ctr%3E%5Cn%20%20%20%20%5Ct%3Ctd%3Ered%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3E0%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3EFoo%20Bar%3C%2Ftd%3E%5Cn%20%20%20%20%20%200%5Cn%20%20%20%20%3Ctr%3E%5Cn%20%20%5Ct%3Ctr%3E%5Cn%20%20%20%20%5Ct%3Ctd%3Ered%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3E1%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3EJoe%20Blogs%3C%2Ftd%3E%5Cn%20%20%20%20%20%201%5Cn%20%20%20%20%3Ctr%3E%5Cn%20%20%5Ct%3Ctr%3E%5Cn%20%20%20%20%5Ct%3Ctd%3Egreen%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3E2%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3EAnne%20Other%3C%2Ftd%3E%5Cn%20%20%20%20%20%202%5Cn%20%20%20%20%3Ctr%3E%5Cn%20%20%5Ct%3Ctr%3E%5Cn%20%20%20%20%5Ct%3Ctd%3Eblack%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3E3%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3ESomeone%20Else%3C%2Ftd%3E%5Cn%20%20%20%20%20%203%5Cn%20%20%20%20%3Ctr%3E%5Cn%20%20%5Ct%3Ctr%3E%5Cn%20%20%20%20%5Ct%3Ctd%3Eblack%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3E4%3C%2Ftd%3E%5Cn%20%20%20%20%20%20%3Ctd%3ELast%20Person%3C%2Ftd%3E%5Cn%20%20%20%20%20%204%5Cn%20%20%20%20%3Ctr%3E%5Cn%20%20%3C%2Ftbody%3E%5Cn%3C%2Ftable%3E%22%2C%22preparationScript%22%3A%22Handlebars.registerHelper('test'%2C%20function%20(a%2C%20b)%20%7B%5Cn%5Ctconsole.debug(a%2C%20b)%3B%5Cn%20%20%20%20return%20b.data.key%3B%5Cn%7D)%5Cn%22%2C%22handlebarsVersion%22%3A%224.7.8%22%7D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants