2015-07-28 54 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