簡體   English   中英

具有屬性雙向綁定的聚合物自定義元素

[英]Polymer custom element with two-way binding of attribute

我有一個聚合物元件來顯示和設置評級(1-5星),並且在顯示給定的評級值並傳播回該值(即更改{{item.rating}} ,如果點擊其中一顆星。 可能是什么問題呢 ?

我使用這樣的元素,它不會更改item.rating

<yp-rating rating="{{item.rating}}"></yp-rating>

使用紙張輸入,它的工作原理是:

<paper-input value="{{item.rating}}" label="Rating"></paper-input>

元素本身在這里:

<dom-module id="yp-rating">
    <template>
        <style is="custom-style">
        iron-icon {
            --iron-icon-fill-color: lightgray;
        }
        </style>

        <iron-icon th:title="#{rating1}" icon="{{star(rating, 1)}}" on-tap="setStar" data-s="1"></iron-icon>
        <iron-icon th:title="#{rating2}" icon="{{star(rating, 2)}}" on-tap="setStar" data-s="2"></iron-icon>
        <iron-icon th:title="#{rating3}" icon="{{star(rating, 3)}}" on-tap="setStar" data-s="3"></iron-icon>
        <iron-icon th:title="#{rating4}" icon="{{star(rating, 4)}}" on-tap="setStar" data-s="4"></iron-icon>
        <iron-icon th:title="#{rating5}" icon="{{star(rating, 5)}}" on-tap="setStar" data-s="5"></iron-icon>

    </template>
    <script type="text/javascript">
        Polymer({
            is : "yp-rating",
            properties: {
                rating: String,
                notify: true
                //readOnly: false,
                //reflectToAttribute: true
            },
            star: function(r, l) {
                return (this.rating && this.rating >= l) ? "star" : "star-border";
            },
            setStar: function(e) {
                this.rating = e.target.getAttribute("data-s");
                console.log("Rating set to " + this.rating);
                e.stopPropagation();
            }
        });
    </script>
</dom-module>

您的rating屬性未正確聲明。 您已經聲明了兩個屬性: ratingnotify ,但是您可能打算在rating屬性上設置notify: true

更改此:

properties: {
  rating: String,
  notify: true
}

對此:

properties: {
  rating: {
    type: String,
    notify: true
  }
}

觀看演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM