Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否可以使用Elm应用程序外部构建的现有导航来驱动Elm应用程序?_Ruby On Rails_Elm - Fatal编程技术网

Ruby on rails 是否可以使用Elm应用程序外部构建的现有导航来驱动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

我正在使用一个现有的Rails应用程序,其中导航必须继续在后端构建(由于复杂性和时间限制)。预期的结果是使用Elm生成一些页面,使用Rails生成一些页面,不使用散列,也不重新加载整个页面(至少对于Elm页面)。导航的简化版本如下所示:

<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…是的,我深入研究了本机代码(),它似乎没有侦听更改事件。我已经用端口解决方案更新了主要答案。