流星应用中的聚合物元素

时间:2014-02-13 22:40:59

标签: javascript meteor polymer

有没有人成功将聚合物元素添加到Meteor项目中?我正努力让它发挥作用。

我尝试使用bower在public下安装Polymer包:

├── public
│   ├── bower_components
│   │   ├── platform
│   │   └── polymer
│   ├── elements
│   │   └── my-element.html

然后我包含了这样的元素:

<head>
  <title>test</title>
  <script src="bower_components/platform/platform.js"></script>
  <link rel="import" href="elements/my-element.html">
</head>
<body>
  ...
  <my-element></my-element>
  ...
</body>

这导致了对platform.js和my-element.html的XHR请求的无限循环。

我还尝试了meteor-polymer包,其中不包含polymer.html,我无法让它识别包装:

=> Errors prevented startup:

While building the application:
error: no such package: 'polymer'

我希望有人能够让Polymer与Meteor合作,因为我真的想在这款应用中使用我的组件。

9 个答案:

答案 0 :(得分:15)

我创建了一个包,用于向Meteor添加Polymer功能。

这是github。

http://github.com/ecwyne/meteor-polymer

更新: 它也可以使用meteor add ecwyne:polymer-elements

添加

答案 1 :(得分:10)

如果您仍然遇到在Meteor中添加和使用Polymer的问题,这里有一种方法可行。

我们将使用 Bower 将Polymer添加到Meteor项目中。

创建Meteor应用程序后,导航到应用程序的目录并按照以下步骤操作:

  1. $ bower init =&gt;这将指导您完成通过终端
  2. 创建bower.json文件所需的步骤

    现在让我们添加Polymer组件:

    1. $ bower install --save Polymer/polymer

    2. bower install --save Polymer/webcomponentsjs

    3. bower install --save Polymer/core-elements

    4. bower install --save Polymer/paper-elements

    5. 现在我们在app的根文件夹中有一个bower_components目录,其中包含Polymer componets。创建另一个名为public的文件夹,并将bower_components移到public文件夹中,以便我们public/bower_components

      以下是一段简单的代码,您可以将yourappname.html的内容替换为。

      <head>
      <title>Athman's Polymer Demo</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
      <meta name="mobile-web-app-capable" content="yes">
      <meta name="apple-mobile-web-app-capable" content="yes">
      <script src="bower_components/webcomponentsjs/webcomponents.js"></script>
      <link rel="import" href="bower_components/core-scaffold/core-scaffold.html">
      <link rel="import" href="bower_components/core-header-panel/core-header-panel.html">
      <link rel="import" href="bower_components/core-menu/core-menu.html">
      <link rel="import" href="bower_components/core-item/core-item.html">
      <link rel="import" href="bower_components/paper-toast/paper-toast.html">
      <link rel="import" href="bower_components/paper-fab/paper-fab.html">
      
      <style>
          html, body {
              height: 100%;
              margin: 0;
          }
          body {
              font-family: sans-serif;
          }
          core-scaffold {
              position: absolute;
              top: 0;
              right: 0;
              bottom: 0;
              left: 0;
          }
          #core_toolbar {
              color: rgb(255, 255, 255);
              background-color: rgb(79, 125, 201);
          }
          #core_card {
              width: 96%;
              height: 300px;
              border-top-left-radius: 2px;
              border-top-right-radius: 2px;
              border-bottom-right-radius: 2px;
              border-bottom-left-radius: 2px;
              box-shadow: rgba(0, 0, 0, 0.0980392) 0px 2px 4px, rgba(0, 0, 0, 0.0980392) 0px 0px 3px;
              margin: 2%;
              background-color: rgb(255, 255, 255);
              text-align: left;
          }
          paper-fab {
              position: absolute;
              right: 20px;
              bottom: 20px;
          }
      </style>
      </head>
      <body >
      <core-scaffold>
          <core-header-panel navigation flex mode="seamed">
              <core-toolbar id="core_toolbar">Navigation</core-toolbar>
              <core-menu theme="core-light-theme">
                  <core-item icon="settings" label="item1"></core-item>
                  <core-item icon="settings" label="item2"></core-item>
              </core-menu>
          </core-header-panel>
          <div tool>Test Project</div>
          <core-card id="core_card" vertical layout start>
              <div style="padding: 20px;">This is a sample project</div>
          </core-card>
          <paper-toast id="toast1" text="Created by Nic Raboy"></paper-toast>
      </core-scaffold>
      <paper-fab icon="add" onclick="document.querySelector('#toast1').show()"></paper-fab>
      </body>
      

      现在让我们的应用运行...

      1. $ meteor
      2. 享受聚合物

        致谢:Nic Raboy: Using Polymer With Apache Cordova

答案 2 :(得分:4)

很抱歉听到你一直无法让Meteor和Polymer在一起玩得很好。上面的评论解释了Meteor的模板系统的情况,但万一它有用:

在Polymer团队中,我们创建了一个名为Vulcanize的工具,它可以将Polymer元素所需的所有样式,脚本和依赖项展平(连接)到单个文件中。这消除了对任何XHR / Ajax调用的需要,除非元素在某处调用远程服务器。

这是使用Vulcanize工具的guide,它可以帮助解决上述问题。

答案 3 :(得分:0)

我也和这两个人一起玩过。它不是那么漂亮,但我一起工作。

<head> <title>my-app</title> <script src="/polymer/platform.js"></script> <link rel="import" href="/polymer/polymer.html"> </head>

所以

在我的公共目录中

/public/polymer/polymer.html
/public/polymer/other-polymer-files

流星聚合物包已过时

答案 4 :(得分:0)

虽然有一种聚合物(https://atmospherejs.com/package/polymer)的陨石包装似乎很有希望。

如果您想自己添加javascript文件,可能需要尝试将它们放在:

client/compatibility/

如果你没有,你就无法访问聚合物的全局变量,因为正常的javascript全局变量只是在任何函数之外创建为var myGlobal;的变量。

我很好奇流星如何解决聚合物把手的模板语法。

`

答案 5 :(得分:0)

@jamstooks 我和你一样有相同的文件夹结构,也有同样的麻烦。

终于有了工作 - &gt;尝试:

<script src="bower_components/webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="bower_components/polymer/polymer.html" />

然后,离开&#34; my-element &#34;标记出来并只使用webcomponents。 例如:

<core-scaffold id="core_scaffold">
  <core-header-panel mode="seamed" id="core_header_panel" navigation flex>
    <core-toolbar id="core_toolbar">
    </core-toolbar>
    <core-menu valueattr="label" id="core_menu" theme="core-light-theme">
      <core-item id="core_item" icon="settings" label="Item1" horizontal center layout active></core-item>
      <core-item id="core_item1" icon="settings" label="Item2" horizontal center layout></core-item>
    </core-menu>
  </core-header-panel>
  <div id="div" tool>Your App Title
  </div>
   <core-pages selected="0" selectedindex="0" notap id="core_pages">
    <section id="section" active>
    </section>
    <section id="section1">Page Two</section>
  </core-pages>

</core-scaffold>

流星1.0.2.1 流星添加ecwyne:聚合物元素

@ecwyne感谢你的包裹贡献 - 像魅力一样: - )

答案 6 :(得分:0)

在Meteor中,/public目录中的所有文件夹/文件都要求您导入如下:

<link import="/bower_components..>和您的自定义元素相同

<link import="/elements/my-elements.html>

注意:

无需使用bower安装Polymer。

相反,试试这个:

$ meteor add ecwyne:polymer-elements

答案 7 :(得分:0)

重要

对于聚合物v0.5.5,使用分叉的@ecwyne包更新到最新的聚合物版本:

meteor add boxxa:polymer-elements

答案 8 :(得分:0)

使用聚合物元素时遇到了类似的问题。解决方案是一个构建插件,可以硫化导入文件中列出的所有文件。

结帐https://github.com/meteorwebcomponents/compiler。它正是这样做的。使用此包,您不必在公共文件夹中编写聚合物代码,然后导入到blaze模板。使用studentList[0].classRollNum,您可以使用聚合物作为默认视图图层而不是闪耀。您需要做的就是创建一个名为mwc:compiler的配置文件。

我们已经构建了一个布局渲染包,可以像Blaze.render函数一样使用它。 https://github.com/meteorwebcomponents/layout

还可以使用从聚合物组件中反应性地使用流星数据的数据混合https://github.com/meteorwebcomponents/mixin

这是一个带有flowrouter https://github.com/meteorwebcomponents/demo-flowrouter

的演示应用

这是一个使用上述所有软件包https://github.com/HedCET/TorrentAlert

的应用