0

我有一个应用程序,它将根据这样的路线显示图像集合:

client '/{{_type}}', controller: 'main', action: 'index'
client '/', {}

这个想法是,MainController#index我将能够查看params._type并执行如下查询:

@uploads = store._uploads.where({category: params._type})

我有一个带有链接的导航栏:/、、/spotlight等等/nature。第一个匹配默认路由,因此index调用该操作。然后单击链接到的导航项/spotlight再次调用index操作(预期响应)。但是...如果我单击导航项natureindex操作未调用,则集合不会刷新,并且我没有与类别对应的图像。

我可能对路由应该如何工作采取“Rails”视图,因为我读到了这个:

还需要注意的是,如果一个链接被点击并且渲染新 URL 的控制器/视图在当前组件(或包含的组件)内,页面将不会重新加载,URL 将通过 HTML5 历史 API 更新,并且 params 哈希将更新以反映新的 URL。您可以在参数中使用这些更改来根据 URL 呈现不同的视图。

Volt 文档的上述引用对我来说意味着我不能指望路线来完成我所概述的内容。

谁能澄清实现这一目标的“正确”方法是什么?


添加@ryanstout 的答案,因为它会通过适当的代码格式影响这一点。

client '/{{_type}}', controller: 'main', action: 'index'
#          ^^^  Note that the underscore may not be included
#               here or you will have an undefined value

def uploads
  store._uploads.where({category: params._type})
end

第二部分允许创建响应式数据源,其更改会在路由更改时影响页面。

4

1 回答 1

1

当视图文件更改时,从视图绑定中调用 action 方法。在这种情况下,您的参数正在更改,但不会影响视图文件。处理这种情况的一种方法是使用方法而不是实例变量uploads

不要设置@uploads,而是执行以下操作:

def uploads
  store._uploads.where({category: params._type})
end

然后在视图中使用您将使用@uploads 的上传。现在,当 params._type 更改时,任何依赖于 uploads 方法的内容都将失效并重新渲染。

希望有帮助。另外,我正在考虑在视图绑定中添加一些东西以使这更容易,但我认为这很好地解释了它的行为方式。

于 2015-10-16T20:29:29.843 回答