为什么我的 Polymer 应用程序中的视图未加载?

Why are the views in my polymer app not getting loaded?

我正在为宠物项目创建一个 Polymer 应用程序,使用 Polymer Starter Kit,并修改它以添加水平工具栏、背景图像等。到目前为止,除了 [=31=当我点击它们时,应用程序工具栏中的 ]s 不会更新 "view"。

到目前为止,我所有的调试都指向 "page" 属性 的方向。我相信这没有得到更新或为空,导致视图默认为 _routePageChanged 观察者方法中指定的 "about"(根据入门工具包,它是 View-2)。

我尝试在 Chrome 上使用 DevTools 上的调试器,但作为新手,我不太清楚我是否正确使用。我一直进出数百个函数调用。

我正在复制应用程序的相关部分-shell。

请帮助或至少为我指明正确的方向;自 2 天以来,我一直在尝试解决此问题。谢谢!

<app-location
    route="{{route}}">
</app-location>

<app-route
    route="{{route}}"
    pattern=":view"
    data="{{routeData}}"
    tail="{{subroute}}">
</app-route>

<!-- Main content -->
<app-header-layout has-scrolling-region>

  <app-header slot="header" class="main-header" condenses effects="waterfall">

  <app-toolbar class="logo"></app-toolbar>

    <app-toolbar class="tabs-bar" hidden$="{{!wideLayout}}">
       <paper-tabs selected="[[selected]]" attr-for-selected="name">
          <paper-tab><a href="[[rootPath]]home">Home</a></paper-tab>
          <paper-tab><a href="[[rootPath]]about">About Us</a></paper-tab>
          <paper-tab><a href="[[rootPath]]pricing">Pricing</a></paper-tab>
       </paper-tabs>
    </app-toolbar>

  </app-header>

  <iron-pages
        selected="[[page]]"
        attr-for-selected="name"
        fallback-selection="view404"
        role="main">
        <my-view1 name="home"></my-view1>
        <my-view2 name="about"></my-view2>
        <my-view3 name="pricing"></my-view3>
        <my-view404 name="view404"></my-view404>
  </iron-pages>

  </app-header-layout>

</app-drawer-layout>

  <script>
    class MyApp extends Polymer.Element {
      static get is() { return 'my-app'; }

      static get properties() {
        return {
          page: {
            type: String,
            reflectToAttribute: true,
            observer: '_pageChanged'
          },

         wideLayout: {
           type: Boolean,
           value: false,
           observer: 'onLayoutChange'
         },

         items: {
           type: Array,
           value: function() {
             return ['Home', 'About', 'Pricing', 'Adults', 'Contact'];
           }
         },

          routeData: Object,
          subroute: String,
          // This shouldn't be neccessary, but the Analyzer isn't picking up
          // Polymer.Element#rootPath
          // rootPath: String,
        };
      }

      static get observers() {
        return [
          '_routePageChanged(routeData.page)',
        ];
      }

      _routePageChanged(page) {
        // If no page was found in the route data, page will be an empty string.
        // Default to 'view1' in that case.

        this.page = page || 'about';
        console.log('_routePageChange');


        // Close a non-persistent drawer when the page & route are changed.
        if (!this.$.drawer.persistent) {
          this.$.drawer.close();
        }
      }

      _pageChanged(page) {
        // Load page import on demand. Show 404 page if fails
        var resolvedPageUrl = this.resolveUrl(page + '.html');
        Polymer.importHref(
            resolvedPageUrl,
            null,
            this._showPage404.bind(this),
            true);
      }

      _showPage404() {
        this.page = 'view404';
      }

      _onLayoutChange(wide) {
        var drawer = this.$.drawer;

        if (wide && drawer.opened){
          drawer.opened = false;
        }
      }

    }
    window.customElements.define(MyApp.is, MyApp);
  </script>

这是我单击 "Home" link 时的页面快照。

Snapshot of the page

我已经在我的应用程序中解决了同样的问题,页面观察到的功能如下:

static get properties() { return {
                page:{
                type:String,
                reflectToAttribute:true,
                observer: '_pageChanged'},

...

_pageChanged(page, oldPage) {
  if (page != null) {
      if (page === "home" ) {
          this.set('routeData.page', "");
      } else {
          this.set('routeData.page', page);
      }
  .......
  }
 }

老实说,我仍在努力寻找更好的解决方案。因为我有用户页面,所以我无法在 google 搜索结果中建立索引。这只会使 iron-pages 和地址 link.

保持同步