当 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
这可能看起来效率较低,但有很多缓存,而且效率差不多。
一旦我有时间,我将让它在访问的数据发生变化时重新触发操作方法。 (抱歉,还没想好。)
在 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
这可能看起来效率较低,但有很多缓存,而且效率差不多。
一旦我有时间,我将让它在访问的数据发生变化时重新触发操作方法。 (抱歉,还没想好。)