聚合物造型元素

目前,我正在尝试将SlickGrid集成到聚合物元素中,并且在样式方面遇到一些麻烦。

当我将SlickGrid嵌入到Polymer元素中时,具有原始CSS样式的原始SlickGrid示例看起来有所不同。

不含聚合物的代码:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <title>SlickGrid example 1: Basic grid</title>
  <style>
      .slick-cell, .slick-headerrow-column {
          position: absolute;
          border: 1px solid transparent;
          border-right: 1px dotted silver;
          border-bottom-color: silver;
          overflow: hidden;
          -o-text-overflow: ellipsis;
          text-overflow: ellipsis;
          vertical-align: middle;
          z-index: 1;
          padding: 1px 2px 2px 1px;
          margin: 0;
          white-space: nowrap;
          cursor: default;
      }
  </style>
</head>
<body>
<table width="100%">
  <tr>
    <td valign="top" width="50%">
      <div id="myGrid" style="width:600px;height:500px;"></div>
    </td>
    <td valign="top">
      <h2>Demonstrates:</h2>
      <ul>
        <li>basic grid with minimal configuration</li>
      </ul>
    </td>
  </tr>
</table>

<script src="../lib/jquery-1.7.min.js"></script>
<script src="../lib/jquery.event.drag-2.2.js"></script>

<script src="../slick.core.js"></script>
<script src="../slick.grid.js"></script>

<script>
  var grid;
  var columns = [
    {id: "title", name: "Title", field: "title"},
    {id: "duration", name: "Duration", field: "duration"},
    {id: "%", name: "% Complete", field: "percentComplete"},
    {id: "start", name: "Start", field: "start"},
    {id: "finish", name: "Finish", field: "finish"},
    {id: "effort-driven", name: "Effort Driven", field: "effortDriven"}
  ];

  var options = {
    enableCellNavigation: true,
    enableColumnReorder: false
  };

  $(function () {
    var data = [];
    for (var i = 0; i < 500; i++) {
      data[i] = {
        title: "Task " + i,
        duration: "5 days",
        percentComplete: Math.round(Math.random() * 100),
        start: "01/01/2009",
        finish: "01/05/2009",
        effortDriven: (i % 5 == 0)
      };
    }

    grid = new Slick.Grid("#myGrid", data, columns, options);
  })
</script>
</body>
</html>

屏幕截图

原版的

聚合物元素代码:

<link rel="import" href="bower_components/polymer/polymer.html">


<polymer-element name="polymer-slickgrid">
    <template>
        <style>
            .slick-cell, .slick-headerrow-column {
                position: absolute;
                border: 1px solid transparent;
                border-right: 1px dotted silver;
                border-bottom-color: silver;
                overflow: hidden;
                -o-text-overflow: ellipsis;
                text-overflow: ellipsis;
                vertical-align: middle;
                z-index: 1;
                padding: 1px 2px 2px 1px;
                margin: 0;
                white-space: nowrap;
                cursor: default;
            }

        </style>
        <div id="slickGrid" style="width:600px;height:500px;"></div>
    </template>
    <script src="bower_components/slickgrid/lib/jquery-1.7.min.js"></script>
    <script src="bower_components/slickgrid/lib/jquery.event.drag-2.2.js"></script>

    <script src="bower_components/slickgrid/slick.core.js"></script>
    <script src="bower_components/slickgrid/slick.grid.js"></script>
    <script>
        Polymer('polymer-slickgrid', {
            domReady: function(){
                var grid;
                var columns = [
                    {id: "title", name: "Title", field: "title"},
                    {id: "duration", name: "Duration", field: "duration"},
                    {id: "%", name: "% Complete", field: "percentComplete"},
                    {id: "start", name: "Start", field: "start"},
                    {id: "finish", name: "Finish", field: "finish"},
                    {id: "effort-driven", name: "Effort Driven", field: "effortDriven"}
                ];

                var options = {
                    enableCellNavigation: true,
                    enableColumnReorder: false
                };
                var self = this;
                $(function () {
                    var data = [];
                    for (var i = 0; i < 500; i++) {
                        data[i] = {
                            title: "Task " + i,
                            duration: "5 days",
                            percentComplete: Math.round(Math.random() * 100),
                            start: "01/01/2009",
                            finish: "01/05/2009",
                            effortDriven: (i % 5 == 0)
                        };
                    }
                    var element = self.$.slickGrid;
                    var grid = new Slick.Grid(element, data, columns, options);
                })
            }

        });
    </script>
</polymer-element>

元素的用法

<html>
<head lang="en">
    <script src="bower_components/platform/platform.js"></script>
    <link rel="import" href="polymer-slickgrid.html">
</head>
<body>
<polymer-slickgrid></polymer-slickgrid>
</body>
</html>

屏幕截图

聚合物

编辑

似乎应用了单元格样式,但是在聚合物元素内使用时,行具有不同的样式信息。

没有聚合物的CSS屏幕截图

CSS与聚合物

Polymer元素内部的SlickGrid屏幕快照

没有聚合物的CSS

错误语法

您的<polymer-slickgrid>元素看起来像是内联显示的。参见此处:http : //www.polymer-project.org/articles/styling-elements.html#element-defined-styles

简单的解决方案:

<style>
  :host {
    /* Note: by default elements are always display:inline. */
    display: block;
  }
</style>

..或您可以添加“ block”属性,如下所示: <polymer-slickgrid block>

[更新]

看来该插件正在向文档添加内联样式,<head>这意味着这些样式将不会应用于您的元素。

看到这里:https : //github.com/mleibman/SlickGrid/blob/e6e2f88f832742c44e0fabf1f3864e5176386033/slick.grid.js#L921

作为hack hack和概​​念验证,您可以获取这些样式并将它们内联到您的元素中:

var styles = [];
var styleSheets = window.document.styleSheets;
$.each(styleSheets, function(i, sheet) {
    var sheet = styleSheets[i];
    if (sheet.cssRules) {
        $.each($.makeArray(sheet.cssRules), function(i, rule) {
            if (rule.cssText && /slickgrid/.test(rule.cssText)) {
                styles.push(rule.cssText);
            }
        })
    }
});

var inlineStyles = '';
$.each(styles, function(i, style) {
    inlineStyles += (style + "\n");
});
inlineStyles = '<style type="text/css">' + inlineStyles + '</style>';
$(this.$.slickGrid).before(inlineStyles);

我没有在许多浏览器中测试过此代码,请不要使用它,它只是一个POC。我在之后添加了该代码var grid = new Slick.Grid(element, data, columns, options);

这是上述hack的网格外观,显示在自定义元素中(我还必须将jquery ui和slick.grid样式表添加到自定义元素中):

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章