当 link 被点击到具有相同操作的页面时触发操作 (VoltRb)

Fire an action when a link gets clicked to a page that has the same action (VoltRb)

http://localhost:3000/books,我有一个索引页,其中有一个图书列表。

当您单击 link 之一时,它所绑定的操作 book 将被触发:

但是,当您从其中一页点击 link 之一时,不会触发 book 操作:

请注意,当从索引页和书页中单击 link 时,URL 确实发生了变化,但我遇到的问题是 book 在您单击 link 从另一个书页转到一个书页时不会被激活。我该如何解决这种情况?

仅供参考,here is a repo 可以重现此问题的地方。

方法 book 没有被调用两次,因为您的视图已经设置好了。 url 中的更改只会触发您视图中的反应性更新。

您想要达到的目标是什么?

事实证明,Volt computations are a way to solve this problem. By using the params collection, you can attach computations to changes in the URL. I solved this issue and got book to run on changes in the URL like so: https://github.com/ylluminarious/volt_action_problems/commit/5fcefc16d7b14a980f68ce572a80f25540d21636

抱歉回复晚了。这是我的修复列表中的一个已知问题。如 GDP2 所述,您可以使用 .watch!处理它,或者可能更好的方法是以更实用的方式编写控制器,以便在方法中使用从参数中提取的数据而不是设置实例变量。

例如,如果您在查询中使用参数,而不是像这样做:

attr_reader :query
def index
  @item = store.items.where(name: params._name).first
end

你可以这样做:

def query
  store.items.where(name: params._name).first
end

这可能看起来效率较低,但有很多缓存,而且效率差不多。

一旦我有时间,我将让它在访问的数据发生变化时重新触发操作方法。 (抱歉,还没想好。)