<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alessandro Di Maria</title>
    <description>The latest articles on DEV Community by Alessandro Di Maria (@grrrisu).</description>
    <link>https://dev.to/grrrisu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F172017%2F4bdd21dc-5507-42ab-8786-fa1b595af63b.jpeg</url>
      <title>DEV Community: Alessandro Di Maria</title>
      <link>https://dev.to/grrrisu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grrrisu"/>
    <language>en</language>
    <item>
      <title>Update LiveView for Alpine.js 101</title>
      <dc:creator>Alessandro Di Maria</dc:creator>
      <pubDate>Sun, 04 Jul 2021 15:24:34 +0000</pubDate>
      <link>https://dev.to/grrrisu/update-liveview-for-alpine-js-101-41pk</link>
      <guid>https://dev.to/grrrisu/update-liveview-for-alpine-js-101-41pk</guid>
      <description>&lt;p&gt;Today I tried to upgrade Alpine.js V2 to the newly released &lt;a href="https://alpinejs.dev/"&gt;version 3&lt;/a&gt; in one of my phoenix applications. As with major versions, the new alpine version introduces some &lt;a href="https://alpinejs.dev/upgrade-guide"&gt;breaking changes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First, you need now to explicitly &lt;a href="https://alpinejs.dev/upgrade-guide#need-to-call-alpine-start"&gt;start alpine&lt;/a&gt; with &lt;code&gt;Alpine.start()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Alpine&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alpinejs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Alpine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Alpine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Alpine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Second, and this took me some time to figure out, as it is not documented on the changes page, you need to adapt how alpine &lt;a href="https://hexdocs.pm/phoenix_live_view/js-interop.html#client-hooks"&gt;integrates&lt;/a&gt; with LiveView. Before alpine elements had a property &lt;code&gt;__x&lt;/code&gt;, that now changed so that you filter now for elements with the &lt;code&gt;_x_dataStack&lt;/code&gt; property.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;liveSocket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;LiveSocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/live&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Socket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;dom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;onBeforeElUpdated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_x_dataStack&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; 
        &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Alpine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! I hope this works for you as well and saves you some time.&lt;/p&gt;

</description>
      <category>todayilearned</category>
      <category>phoenix</category>
      <category>elixir</category>
      <category>alpinejs</category>
    </item>
  </channel>
</rss>
