【发布时间】:2015-10-14 19:37:22
【问题描述】:
我有一个自定义元素,它有两类样式,静态和动态。静态样式存在于模块 <dom-module><style>...</style></dom-module> 中,但动态样式需要存在于它们自己的样式表中,然后在必要时加载。
自定义元素将具有一些样式,语法为 color: var(--dynamic-element-color),然后在一些 ajax 内容确定客户端后,我将获取该客户端的样式表并以某种方式包含它以更新 mixin 样式...也许通过 @import url(client-1.html)必要时结合Polymer.updateStyles()。
我通过两种方法进行了尝试:
1)在自定义元素的方法中 - 某种形式的这种方法在 Chrome 中有效,但在其他地方没有:
ready: function() {
this.determineClientStyle('test');
},
determineClientStyle: function(client) {
var link = document.createElement('link');
link.rel = 'import';
link.href = '/elements/'+client+'/linus.html';
var beforeNode = Polymer.dom(this.root).childNodes[0];
Polymer.dom(this.root).insertBefore(link, beforeNode);
}
2)在 index.html 中 - 在 Chrome 和 FF 中工作,但不能在 Safari 或我手机的“互联网”浏览器中工作:
window.addEventListener('WebComponentsReady', function() {
function applyClientTheme(client) {
var link = document.createElement('link');
link.rel = 'import';
link.href = client+'.html';
Polymer.dom(document.head).appendChild(link);
}
applyClientTheme('theme');
});
Here is an example project on github.
我的真实项目有许多自定义元素,所有这些元素都将具有var(--some-style) 的样式,我希望加载一个单一的导入来满足每个客户的要求。
@Abhinav 在下面提到的内容我还没有成功......要么我解释不正确,要么只是做错了。
这样做的最佳方法是什么?
【问题讨论】:
标签: polymer shadow-dom