首先在Programmers.SE上输入,但想象一下这可能更适合这里 - 纯粹是因为它不是要求就特定技术问题提出建议。随意投票移动!
我目前正在使用适用于Ruby on Rails的“Spree”电子商务平台开展项目。配置和使用是一件非常愉快的事情。然而,欢乐在那里停止了。
我正在尝试开发一个完全自定义的界面 - 与默认配置完全不相似的界面。现在Spree文档显示我只有两个选项:
deface
覆盖。到处。似乎要覆盖其他覆盖。当然,使用污点的风格如此戏剧性的变化是一个完整的噩梦; Deface
看起来不像是一种可以接受的方式来重写一个完整的UI;它似乎也没有效率。所以我选择完全重建视图。
然后实现了大约8个插件全部依赖于污损覆盖,视图文件硬编码,目标选择器通常是' flakey '(充其量)。
除了狂热网站上非常小的documentation之外,我所能找到的都是来自各种会议的幻灯片,其中 - 没有谈话的背景实际上是最小的用途。他们似乎都专注于使用污损覆盖进行大致简单的更改,而最近的更改似乎已超过一年。
我错过了什么吗?有谁知道执行这样的事情的最佳做法?我应该在哪里寻找?
答案 0 :(得分:5)
我遇到了同样的问题,正如你所说,当有很多插件使用deface时,最好使用deface而不是覆盖整个视图。 花了一些时间才知道狂欢的圣地和除了文档之外的指南是狂欢的github sourcecode。文档中缺少任何内容。
如果要覆盖视图,有两种方法:
1)您想要使用新视图完全覆盖它。在这种情况下,我建议不要更改现有源代码中使用的现有结构并添加新的更改。这样你仍然可以使数据钩子可用于其他插件,具体取决于视图的html代码结构和标签。
2)使用Deface。如果没有足够的文档,那么开始使用Deface有点噩梦。开始使用Deface的最佳方法是github。
在Deface替换之后测试新视图代码的最重要的实用程序是使用rake任务。
要查看使用标记选择的元素,请使用:
rake deface:test_selector['spree/address/_form','p']
- 这显示了在相应视图partial中使用p的所有元素。
要查看原始的部分用途:
rake deface:get_result[shared/_head]
这些在deface的github中提到但是这些非常方便,因此强调。
答案 1 :(得分:4)
污损是一场巨大的灾难。整个概念是一个巨大的反模式,它导致了一个完整的,完全的,不可摧毁的噩梦。我真的希望Spree社区能够远离它,尤其是插件,并为应用程序内的视图级自定义提供更好的选择。
不使用Spree中的Deface的最大缺点是您的自定义代码偏离了Spree' stock'查看代码,并且当您升级spree时,您有两个不同的(您的自定义和spree默认)版本,以协调每次spree升级。而且你必须逐个文件地完成。
这很乏味,但我通过插入评论并开始定制代码来让自己变得更容易一些。并且'结束自定义代码'在每个视图中我都使用我自己的代码混合了spree默认代码。这使得升级过程更加顺畅,但仍然没有简单的答案。
如果Winston Churchill是Rails开发人员,他会说" Spree中的查看覆盖是最糟糕的自定义形式,除了所有其他人。"
答案 2 :(得分:3)
继狂欢用户邮件列表上的discussion之后,普遍的共识似乎是:
最好的选择是废弃所有视图覆盖的污点 - 这就是 最好通过分叉狂欢前端来实现。
关于插件,事情并不简单 - 如果不是这样的话 可以保持数据挂钩然后我只需要禁用覆盖 并直接在视图中实现它们。
不是很好,但两个邪恶中的较小者。通过使用污点进行如此戏剧性的改变,你会发现自己陷入了混乱。
讨论还包括一位开发人员提到(非常好的想法)在执行此操作后利用Capybara进行测试,以确保一切仍然正常。每次更新后都会有维护,这就是@ Lavixu的答案试图避免的 - 在一个理想的世界里,他会被发现并且可以用来破坏这个......
对于不那么剧烈的变化,我建议每次都使用deface,而Lavixu提到了一个关于测试污损覆盖的非常好的提示。
不幸的是,事情并非那么简单。如果你发现自己处于这种情况,可能值得阅读上面的讨论,这非常有帮助。