【问题标题】:Bootstrap glyphicons in play framework游戏框架中的引导字形图标
【发布时间】:2013-02-26 23:48:36
【问题描述】:

我想在游戏框架中使用Bootstraps glyphicons

所以当我使用<i class="icon-search" /> 时,引导程序会在“assets/img/...”中寻找图标。此行为与anatomy of a play application 冲突,因为图像位于“assets/images/...”中。

所以我尝试通过为“assets/img”的 GET 请求定义一个额外的路由来重新映射:

# Map static resources from the /public folder to the /assets URL path
GET     /assets/img/*file           controllers.Assets.at(path="/public/images", file)
GET     /assets/*file               controllers.Assets.at(path="/public", file)

但是这样做,我得到一个编译错误“没有足够的方法参数:(路径:字符串,文件:字符串)play.api.mvc.Call。未指定的值参数文件。”在我的所有其他公共资产上我打电话。

我做错了什么?

【问题讨论】:

  • 我认为您正在尝试修复应用程序配置的 CSS 路径问题。你不能修复 CSS 吗?
  • 我不想破解 Twitter 的股票 css 来解决这个问题,只要 play 为我提供了一种在路线上重新映射路径的温和方式。
  • 我理解这种哲学,但 Bootstrap 的变量旨在成为……变量。 :-)
  • 您不喜欢一个名为“public/template”之类的目录,其中包含所有引导程序(js+css+img)吗?
  • 是的,是的,您的解决方案是正确的。我只是建议移动整个目录以便从 /assets/bootstrap/img 和 /assets/bootstrap/css 中访问 c​​ss(无需编辑播放路线即可)

标签: twitter-bootstrap playframework playframework-2.0


【解决方案1】:

如果您使用的是 Bootstrap LESS,请更改 variables.less 中的路径:

// Sprite icons path
// -------------------------
@iconSpritePath:          "assets/images/techcore/glyphicons-halflings.png";

【讨论】:

  • 好的,我希望不要接触整个 LESS 和 CoffeeScript 的东西,因为这对我来说是全新的。虽然我了解这些优点,但我仍然喜欢我的网络应用程序中的某些内容是静态的;)...好吧,让我们看看我是否可以学习如何做到这一点,我会尝试一下。
【解决方案2】:

实际上描述我的问题帮助我在这里搜索它;) ...stackoverflow 已经有了答案。希望我的问题至少与我自己回答的这个问题更相关。

根据How to use Twitter Bootstrap 2 with play framework 2.x,我必须为每个单独的 glyphicons 文件定义静态路由,然后对其他资产的请求不会被“错误路由”。

我只是添加了

# Map Bootstrap images
GET     /assets/img/glyphicons-halflings.png            controllers.Assets.at(path="/public", file="/images/glyphicons-halflings.png")
GET       /assets/img/glyphicons-halflings-white.png      controllers.Assets.at(path="/public", file="/images/glyphicons-halflings-white.png")

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)

到我的路由,所以我不需要以特殊方式修改任何框架。

感谢您的建议

【讨论】:

  • 这个解决方案对我有用,但起初我遇到了一个问题,因为我将引导图像放在其他资产之后:记住它们必须按照 Jürgen 建议的顺序!
  • 正是我需要的。
【解决方案3】:

其实……人们经常把一些初始结构与它混淆必须完全相同。对于app 文件夹,这是正确的。 Play 对controllersmodels 使用了一些隐式导入,并且无缘无故地更改它会带来更多的麻烦。无论如何,public 文件夹不会在任何默认操作/控制器/视图中呈现,因此它的布局可以完全自定义。

(注意:好的,我必须承认,我没有读过这个文档,他们写了你应该像这样组织你的静态资产以保持所有 Play 应用程序的一致性。 但它不是真的!:))

一般规则是:不要破坏放在public 目录中的即用型框架、插件等。例如,虽然您可以通过一些额外的路线很容易地修改引导程序,但如果您尝试使用 Aloha 编辑器进行相同操作,您可能会永久损坏它。如果你想保持一个干净的结构 - 创建一个示例 public/frameworks/bootstrap-current 文件夹并从原始作者那里提取包。

它可以让您通过简单的解压缩包更新到新版本,也可以避免您的头痛。

【讨论】:

  • Tiziano 在问题 cmets 中也提到了这一点。我完全同意你的看法,这可能是最好和正确的方法。不知道,为什么我一开始不这样做;)......我接受这个答案和很好的描述,为什么它是最好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多