在Mithril

时间:2017-10-25 19:22:18

标签: javascript mithril.js

秘银的网站声明:

  

每个应用程序只能有一个m.route调用。

所以我几乎可以使用code splitting进行解决。

但我的应用程序只知道给定URL的第一级组件,它使用异步code splitting来完成。

现在的问题是:那些第一级组件会想要注册他们自己的命名空间路由,以利用他们自己的内部组件的URL状态更改,因为我无法在他们之前注册他们的路由时间(并且Mithril阻止在app /包装组件设置初始路线后再次设置路线。)

为了进一步解决问题的复杂性,每个第一级组件都是根据需要加载的,因此我无法等待所有第一级组件加载然后实例化m.route;路线必须动态添加。

我喜欢这个框架,但我的用例似乎是一个我似乎无法解决的边缘情况。

简单的解决方案是在每个第一级组件加载后重新实例化m.route对象,但不支持。

更新

我的帖子的目的是找到一种本地的方式来进行动态路由而不是失去功能(例如可变路由),但是它被强化了,这是不可能的。

我用内部路由器替换了整个路由器,因此我可以支持动态(和未知)路由,更灵活的可变路由路由,更好的params方法,甚至可以跨视图提供get / set全局数据,而无需全局窗口变量或在这种情况下使用History API。我仍然提供了Mithril所做的其余功能,只是更简单一点。

为什么不做拉动请求?从我在不同的Github页面上读到的内容来看,其中的两大部分不适用于秘银的核心逻辑;和/或,太多的边缘情况,他们不想支持它。

我仍然会选择Mithril而不是任何其他框架。

与此同时,我构建了我需要的东西,希望Mithril 2能够实现动态路由。

2 个答案:

答案 0 :(得分:1)

Mithril的路由器旨在作为一种相对简单的解决方案,可以轻松实现站立简单的SPA,动态注册路由不是当前设计的一部分。

我认为通过找到支持您需要的动态路由注册并使用该路由器的路由器,您可能会得到最好的服务。

该路由器与Mithril的集成可能是天真的(当路由改变时使用m.mount())或者通过模拟existing router API的一些逻辑来更复杂。

答案 1 :(得分:1)

秘银的路由器不是最先进的工具。虽然你可以随心所欲地解决它。

有一种方法可以使新路线动态化。 我刚才做了一点jsfiddle。 Documentation - Function Reference - ControlClick()

您对2-11和63-92行感兴趣。

虽然它们在小提琴中不是动态的,但您可以创建一个函数,替换第73行的switch,它将处理您的路径并返回需要渲染的组件。这样,如果你有一个包含你想要的所有URL或其他路由的数组流,你可以在每个路由更改调用上对每个param进行一次函数处理,并用数组进行检查。

对不起,请回复一下。编写问题的确切解决方案需要本地服务器。