Ruby on rails 是否可以使用Elm应用程序外部构建的现有导航来驱动Elm应用程序?
我正在使用一个现有的Rails应用程序,其中导航必须继续在后端构建(由于复杂性和时间限制)。预期的结果是使用Elm生成一些页面,使用Rails生成一些页面,不使用散列,也不重新加载整个页面(至少对于Elm页面)。导航的简化版本如下所示:Ruby on rails 是否可以使用Elm应用程序外部构建的现有导航来驱动Elm应用程序?,ruby-on-rails,elm,Ruby On Rails,Elm,我正在使用一个现有的Rails应用程序,其中导航必须继续在后端构建(由于复杂性和时间限制)。预期的结果是使用Elm生成一些页面,使用Rails生成一些页面,不使用散列,也不重新加载整个页面(至少对于Elm页面)。导航的简化版本如下所示: <nav> <a href="rails-page-1">... <a href="rails-page-2">... <a href="elm-page-1">... <a href="el
<nav>
<a href="rails-page-1">...
<a href="rails-page-2">...
<a href="elm-page-1">...
<a href="elm-page-2">...
</nav>
<div id="elm-container"></div>
,可能接近后者,除非我从根本上误解了包的功能
有没有办法做到这一点?我用散列标签让它工作,但是没有它们就没有运气
使用散列标签
你让我笑了
我的Helpers.elm
文件中有这个家伙,我可以用它代替Html.Events。单击
{-|用于覆盖默认值“”,并且您不想破坏鼠标中键单击的体验。您可以将所有与其中一个一起劫持。使用用于内部url更改的相同消息创建要订阅的端口
导入导航(位置)
端口外部推送:(位置->消息)->子消息
输入味精
=更改位置
| ...
主要=
导航.程序URL更改
{ ...
,订阅:\\->externalPush-UrlChange
}
页面加载后,请使用以下命令:
const jacknavclick=(事件)=>{
//polyfill“匹配”,如果需要
if(event.target.matches(“a[href]”){
//阻止浏览器导航
event.preventDefault()
//推送新的url
window.history.pushState({},“,event.target.href)
//通过端口将新位置发送到Elm运行时
//假设'app'是'Elm.Main.embed'的名称,或
//随便
app.ports.externalPush.send(window.location)
}
}
//你的导航选择器在这里
const nav=document.querySelector(“nav”)
nav.addEventListener(“单击”,劫持navClick,false)
我认为将事件监听器附加到锚链接以防止默认,并通过端口将意图传递到Elm@SimonH看起来是这样的,我正在考虑这个选择。如果可能的话,我想看看在Elm的情况。谢谢,我采纳了你的建议。使用这个解决方案,有必要使用标志吗或者端口来让它完全工作?如果没有,你能详细说明Elm端发生了什么吗?到目前为止,我的更新没有被触发。Arg…是的,我深入研究了本机代码(),它似乎没有侦听更改事件。我已经用端口解决方案更新了主要答案。