2015-07-28 53 views
1

我已經在一個聚合物組分如下:條件模板似乎並沒有工作

<dom-module id="ws-auth"> 
<template> 
    <template is="dom-if" if="{{screen.initial}}"> 
     <a on-click="doLocalLogin">Local Login</a> 
    </template> 
    <template is="dom-if" if="{{screen.localLogin}}"> 
     login screen 
    </template> 
</template> 
</dom-module> 
<script> 
(function() { 
    Polymer({ 
     is: 'ws-auth', 
     properties: { 
      screen: { 
       type: Object, 
       notify: true 
      } 
     }, 
     attached: function() { 
      if (!this.screen) { 
       this.screen = { 
        initial: true 
       } 
      }; 
     }, 
     doLogin: function() { 
      this.screen = { 
       login: true 
      } 
     }, 
     doLocalLogin: function() { 
      this.screen = { 
       localLogin: true 
      } 
     } 
    }); 
})(); 

當我點擊「本地登錄」第一模板不隱藏。我期望它隱藏起來,因爲我將屏幕設置爲一個沒有定義'初始'屬性的新對象。還有就是我努力去理解另一件事:如果我將屏幕對象

{ 
    initial: false, 
    localLogin: true 
} 

在doLocalLogin()函數,什麼都沒有發生。

+0

此外,您可以在if標籤中使用的表達式似乎相當有限。只有屬性似乎工作,沒有函數調用,'==='等是這樣嗎? – Janos

+0

Plunkr:http://plnkr.co/edit/2w5ghun93mU3mSIzm8Ip?p=preview – Janos

回答

1

當您更改對象的子屬性時,即使您想要覆蓋整個對象,也需要使用Polymer API。您可以使用setnotifyPath。爲了讓您的例子來工作,我必須設置initialfalse

doLocalLogin: function() { 
    this.set("screen.localLogin", true); 
    this.set("screen.initial", false); 
} 
+0

阿十分感謝。我想如果我替換那個會做的全部對象。這就是爲什麼我有this.screen = {}而不是設置單個參數。 – Janos

+0

無法讓它工作:)請問您可以給我發送一個鏈接給您的朋友嗎? – Janos

+0

這裏你去:http://plnkr.co/edit/Ktowz61xckxceoJ6fBPz?p=preview – Maria