【发布时间】:2013-02-04 01:07:59
【问题描述】:
我已经创建了一个这样的模板:
// template.tpl
<div>
<input id="an_input"></input>
</div>
还有一些 CSS:
// stylesheet.css
input {
background: #000000;
}
最后这是一个精简的模块:
define([
'jquery',
'text!template.tpl',
'text!styleshet.css'
], function($, html, css){
var view = $('#sample_div');
view.append($(html));
var regex = /^([^\s\}])/gm;
var styles = css.replace(regex, '#'+view.attr('id')+' $1');
var style = $('<style>\n'+styles+'\n</style>');
view.prepend(style);
});
本质上正在发生的是,模板正在加载并放入#sample_div。在 CSS 文件作为文本加载后不久,每个项目都以视图 ID 为前缀。
一旦添加了 CSS 前缀,就会创建样式标签并将其放置在视图中。
现在,它完美地工作了,好吧,它并不漂亮,也没有留下太多的错误余地。但是我编写了这段代码来帮助演示我需要什么。
我需要能够加载带有视图特定样式表的模板,其中表单中的样式只会应用于视图并且只会覆盖全局样式。
上面例子的问题在于它是一个hack,一个针对CSS的正则表达式,以及一个新的样式标签的构建,这不是我想要的。我一直在研究 javascript CSS 解析器以获得更简洁的解决方案,虽然 JCSSSP 引起了我的注意,但它把许多函数放入了全局命名空间,而 jquery.parsecss 似乎只适用于文档中已有的样式。
有人对我想要达到的目标有任何经验吗?
【问题讨论】:
标签: javascript html css templates requirejs