【发布时间】:2020-07-08 17:32:36
【问题描述】:
我已经在 cljs 应用程序中定义了双向路由:
(def routes
["" {
"/foo" :bar
["/items" :id] :item-do}]
)
(defn- parse-url [url] (bidi/match-route routes url))
(defn- dispatch-route [matched-route]
(let [panel-name (keyword (name (:handler matched-route)))]
(dispatch [:active-panel panel-name])))
(def history (pushy/pushy dispatch-route parse-url))
当我转到路线“/foo”时,我会看到与:bar 相关联的面板,但是当我转到路线项目/somerandomstring 时,我希望看到与:item-do 相关联的面板,但是看到一个空白页,并在控制台中显示:
Uncaught SyntaxError: Unexpected token '<' myapp.js 1
Reference Error: myapp is not defined. somerandomstring:14
我做错了什么,我该如何解决?如何正确匹配双向 uri 中的任意字符串?
-- 编辑--
我发现了这个:
当我匹配这个时:
{
"/foo" index-handler}
它有效。
但是当我匹配时
{
"/foo" [:id index-handler]
}
即使(bidi/match-route routes "/foo/abc") 输出{:handler index-handler, :route-params {:id "abc"}},
实际上在浏览器中转到这条路线会给出我提到的错误。
Reference Error: myapp is not defined. somerandomstring:14
在控制台中, somerandomstring:14 实际上是我发回的 index.html,第 14 行如下:
<script type="text/javascript">myapp.system.go();</script>
这是为什么?
【问题讨论】:
标签: routing clojurescript bidi