相對聚合物新手在這裏,但不是新的JS。想了解爲什麼下面的代碼片斷不起作用。總之,我將有一個用戶對象,該對象在頁面已經加載後將被填充。該對象的屬性是roles
,它只是一個字符串數組。聚合物2.0 DOM - 如果基於功能輸出
dom-if
條件調用hasRole('user')
,該函數將返回true,但是...我覺得我只是在這裏錯過了一些基本概念,並一直對我的頭反對谷歌一兩天。
我想清楚,hasRole函數在頁面加載時被調用,但不是在之後。雖然我意識到我可以讓user.isAdmin
成爲布爾型,但是我需要爲每個可能的角色創建屬性,並且希望驗證系統比此更靈活。
目前,隱藏的「僅限管理員」部分從不出現。
對不起,如果這是簡單或一個愚蠢的問題或其他什麼,它只是不是我完全理解,也許甚至不知道正確的條款谷歌。
我使用的聚合物2.0.0 rc.3
<link rel="import" href="../../bower_components/polymer/polymer-element.html">
<link rel="import" href="../../bower_components/polymer/lib/elements/dom-if.html">
<dom-module id="test1-app">
<template>
<style>
:host {
display: block;
}
</style>
<button on-click="toggle">Toggle</button>
This is visible...
<template is="dom-if" if="{{hasRole('admin')}}">
but this is hidden.
</template>
</template>
<script>
/** @polymerElement */
class Test1App extends Polymer.Element {
static get is() { return 'test1-app'; }
static get properties() {
return {
user: {
type: Object
}
};
}
toggle() {
if(this.user) {
this.user = null;
}
else {
this.user = {
name: 'Carl',
roles: ['admin','user']
}
}
}
static get observers() {
return [
'userChanged(user.*)'
]
}
hasRole(role) {
if(this.user && this.user.roles && this.user.roles.indexOf(role)>=0) {
return true;
}
else {
return false;
}
}
userChanged() {
//just observing for the sake of observing
console.log(this.user);
}
}
window.customElements.define(Test1App.is, Test1App);
</script>
</dom-module>
我試圖避免的是在屬性中有「isAdmin」,「isGuest」,「isBanned」等bools。你的答案是可行的,但希望是不必爲每個角色更改代碼。 我應該創建一個觀察者,每當user.roles數組發生更改時,它會編輯/重新創建一個子對象,並在運行時說出users.permissions.isAdmin等等。我不確定那會有效,但可以嘗試。 – Carl
我投這個解決方案,因爲它導致我的解決方案反正,如果不是完美的。我把一個觀察者每次角色改變時更新一個權限對象,它將命名該對象的屬性isAdmin isGuest等,這樣我就不必一遍又一遍地創建它,或者稍後改變代碼。乾杯。 – Carl