从外部文件

时间:2015-07-17 08:03:18

标签: html html5 polymer

我有一个我用Yeoman生成的Polymer web应用程序。以下片段显示了如何在index.html中定义页面:

            <iron-pages attr-for-selected="data-route" selected="{{route}}">

                <section data-route="home">
                    <paper-material elevation="1">
                        <my-greeting></my-greeting>
                    </paper-material>
                </section>

                <section data-route="users">
                    <paper-material elevation="1">
                        <h2 class="paper-font-display2">Users</h2>

                        <p>This is the users section</p>
                        <a href="/users/Rob">Rob</a>
                    </paper-material>
                </section>

所以基本上你为每个页面定义一个部分。

是否可以将这些部分定义为对某些外部文件的引用?我不想在主index.html中添加所有内容,因为它很快会变得混乱。

2 个答案:

答案 0 :(得分:0)

除非您使用ajax / iFrames(否)来加载内容,否则会有可能但不会在HTML中出现,并且会使抓取工具难以正常抓取您的所有网页。

您需要将页面转换为Java,Python,PHP,.net框架。

由于您对此不熟悉,我建议您使用WordPress。 那里有很多模板,将来很容易创建和定制。

通常,客户端路由用于单页面应用程序,其中服务器端代码主要用于提供客户端代码通过Ajax使用的RESTful API。

然后你会看到使用Angluar.js

答案 1 :(得分:0)

更新: 这是一个更清洁的版本:

<dom-module id="dyn-import">
<template>
    <div id="container">
        <link rel="import" href="{{href}}"/>
    </div>
</template>
</dom-module>
<script>
(function() {
    Polymer({
        is: 'dyn-import',
        properties: {
            href: {
                type: String,
                notify: true
            }
        },
        attached: function() {
            var container = this.$.container;
            var link = Polymer.dom(container).querySelector('link[rel="import"]');
            link.addEventListener('load', function() {
                var importedDoc = link.import;
                var importedNode = document.importNode(importedDoc.firstChild, true);
                container.innerHTML = importedNode.innerHTML;
            });
        }
    });
})();

导入的HTML可以包含Polymer元素,工作正常。整个事情似乎没有在Safari上工作。此外,我似乎仍然有一些关于相对URLS的问题(比如导入的HTML片段使用HTML导入引用另一个Polymer元素 - 它似乎确实有效,但是控制台上出现错误,错误中的URL似乎已构建像这样:网络欣赏主机+相对网址,这显然是错误的。)

我终于通过编写一个Polymer组件解决了这个问题(好吧,毕竟它是一个Polymer应用程序:)

<dom-module id="dyn-import">
    <template>
        <div id="{{id}}">
            <link rel="import" href="{{href}}"/>
        </div>
    </template>
</dom-module>
<script>
(function() {
    Polymer({
        is: 'dyn-import',
        properties: {
            href: {
                type: String,
                notify: true
            },
            id: {
                type: String,
                notify: true
            }
        },
        ready: function() {
            this.id = "ID_" + new Date().getTime();
        },
        attached: function() {
            var sel = d3.select('#'+this.id);
            var link = sel.select('link[rel="import"]');
            link[0][0].addEventListener('load', function() {
                var importedDoc = link[0][0].import;
                var importedNode = document.importNode(importedDoc.firstChild, true);
                sel.html(importedNode.innerHTML);
            });
        }
    });
})();
</script>

然后可以在index.html中使用它,如下所示:

<section data-route="contact">
    <paper-material elevation="1">
        <dyn-import href="elements/contacts.html"></dyn-import>
    </paper-material>
</section>

我还有一个问题,那是一个搜索引擎友好的解决方案吗?