двухсторонняя привязка значения paper-radio-group/paper-radio-button с помощью Vaadin 10

Я использую бета-версию 3 Vaadin 10, и у меня есть html-файл, связанный с компонентом (@HtmlImport), который содержит <dom-repeat>, внутри которого у меня есть бумажная радиогруппа. Я хочу, чтобы свойство paper-radio-group#selected-property было привязано к моей модели двумя способами, чтобы, когда пользователь выбирает другой переключатель, его значение записывалось обратно в модель. К сожалению, для меня это работает только как односторонняя модель, так как сеттер setAOrBProperty() на стороне Java никогда не вызывается. Может ли кто-нибудь дать мне подсказку, что мне нужно сделать, чтобы новое значение было записано на сервер?

    <link rel="import" href="./bower_components/polymer/polymer-element.html">
<link rel="import" href="bower_components/paper-radio-button/paper-radio-button.html">
<link rel="import" href="bower_components/paper-radio-group/paper-radio-group.html">

<dom-module id=“dmmdl”>
    <template>
        <div>
            <dom-repeat items=“[[myListOfSomething]]”>
                <div>
                        <paper-radio-group selected="{{item.aOrBProperty}}” allow-empty-selection>
                          <paper-radio-button name=“a”>A</paper-radio-button>
                          <paper-radio-button name=“b”>B</paper-radio-button>
                        </paper-radio-group>
                </div>
            </template>
        </div>
    </template>
    <script>
        class BooksGridElement extends Polymer.Element {
            static get is() {
                return 'books-grid'
            }
            // only for testing !!
            // ready() {
            //     super.ready();
            //     this.books = results;
            // }
        }
        customElements.define(BooksGridElement.is, BooksGridElement);
    </script>

</dom-module>

person Bernd Hopp    schedule 02.04.2018    source источник
comment
Поскольку в конце концов вы пишете myListOfSomething, меняет ли что-нибудь то, что он также является двусторонней привязкой данных?   -  person mishu    schedule 02.04.2018
comment
к сожалению нет   -  person Bernd Hopp    schedule 02.04.2018
comment
возможно, вам следует использовать метод для обновления массива, вызвав что-то вроде this.set, чтобы убедиться, что изменения приняты.   -  person mishu    schedule 03.04.2018


Ответы (1)


Я подозреваю, что это вызвано функцией безопасности Flow. Произвольные изменения значения модели от клиента не принимаются по соображениям безопасности. Вместо этого изменения разрешены только для свойств, которые используются в двусторонних привязках шаблонов (например, {{propertyName}}) или явно помечены @AllowClientUpdates в соответствующем геттере Java.

Логика, которая ищет {{propertyName}}, не имеет никаких конкретных знаний о внутренней работе <dom-repeat>, поэтому она не может знать, что {{item.aOrBProperty}} соответствует myListOfSomething[*].aOrBProperty.

Если мое предположение верно, вы можете исправить этот случай, добавив @AllowClientUpdates к методу getAOrBProperty() в интерфейсе вашей модели.

person Leif Åstrand    schedule 04.04.2018