i-n-g-m-a-r

i-n-g-m-a-r

Suppose one defines a simple form like this:

<.simple_form :let={f} for={@changeset} focus={@focus}>

Then how would one collect the @focus value when defining an input:

<.input field={f[:name]} type="text" focus={@focus} />

Annotating simple_form/1 does not work.

attr :focus, :atom, default: nil
<.form :let={f} for={@for} as={@as} focus={@focus} {@rest}>

Phoenix.HTML.Form does not pass @focus or any custom value along.

Using @rest results in @focus being output as a form attribute.

So how does one trickle down key={value} ?

Many thanks.

Showing Posts 1 to 6

LostKobrakai

LostKobrakai

You don’t need to pass the value to <.simple_form> in the first place. You can pass it to the input directly and that’s enough.

i-n-g-m-a-r

i-n-g-m-a-r OP

Thanks for your reply.

Suppose the initial value of @focus is a return value:

focus={get_focus(@changeset, [:field_b, :field_c, :field_a])}

A view implements get_focus/2 because the template knows the order of the fields to be rendered.

It seems like the key={value} syntax would be a nice (or logical?) way to make the @focus assign available downstream.

Where would you execute get_focus/2 and remember it’s return value?

LostKobrakai

LostKobrakai

The individual inputs are not “downstream” from <.simple_form>. The inner html is another input to <.simple_form>.

You don’t want to execute functions in templates if possible (when using LV), so rather calculate it in advance.

i-n-g-m-a-r

i-n-g-m-a-r OP

Thank you.

You would agree that <.celebrate name={"Genevieve"} age={34} /> makes @name and @age available “downstream”?

With it we could do something like <.stuff name={@name} /> (or maybe <.input key={@value} />).

The function definition should allow for “passing down” such assigns.
So when a function does not allow custom attributes the key={value} thing does not work.
I guess Phoenix.HTML.Form would have to support customization.
Something like assign-focus="get_focus(@changeset, [:field_b, :field_c, :field_a])".

About calculating in advance.
That would mean the controller would have to know about the ordering of the inputs to be rendered.

LostKobrakai

LostKobrakai

It makes the values available to celebrate/1, yes.

<.celebrate name={"Genevieve"} age={34}>
  […]
</.celebrate>

Here anything being […] however is just another input to celebrate/1, similar to age and name. It won’t get access to any additional assigns. Using :let={…} is the only way for celebrate/1 to pass data back to its body/slots.

i-n-g-m-a-r

i-n-g-m-a-r OP

Thanks again.

So in conclusion as long as we are in control of a function we can define key={value} syntax.
When using form/1 or other functions out of our control we cannot use it.

Unless we do weird stuff like:

<.simple_form :let={f} for={@changeset} data-focus={get_focus(@changeset, [:field_b, :field_c, :field_a])}>

and

<input type={@type} autofocus={has_focus?(@__given__)}>

and

  def has_focus?(%{__given__: %{field: %{field: name, form: %{options: opts}}}}) do
    opts[:"data-focus"] == name
  end

  def has_focus?(_), do: false

and accept a data-focus attribute on our form.

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New
dillonoconnor
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New
thiagogsr
** (ArgumentError) expected :max_attempts to be a positive integer, got: {:@, [line: 10, column: 19], [{:max_attempts, [line: 10, column:...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews