Polymer 1.0 Односторонняя привязка данных «ребенок-хост» — свойства только для чтения

В Polymer 1.0 я хотел бы иметь одностороннюю привязку данных от дочернего элемента к хосту. Вы можете сделать это, если определите notify: true и readOnly: true при определении свойства. Объяснение здесь.

Также см. мой образец ниже.

Ребенок:

...
Polymer({
  is: "child-element",
    properties:{
       myProp:{
         type: Number,
         notify: true,
         readOnly: true,
         value: 0
        }
    }
});

Хозяин:

...
<child-element my-prop="{{hostValue}}"></child-element>
...

Поскольку имеется {{ ... }}, а для свойства задано значение notify: true, узел попытается выполнить двустороннюю привязку, но у дочернего элемента будет readOnly: true. Таким образом, привязка будет работать только от ребенка к хосту.

В моей настройке я хочу изменить значение в дочернем элементе. Таким образом, связанное значение в хосте изменится соответствующим образом. Но поскольку свойство помечено readOnly: true, дочерний элемент также не может изменить значение.

Есть ли способ привязать один путь от дочернего к хосту, запретить хосту перезаписывать значение, но разрешить дочернему делать это?

ОБНОВЛЕНИЕ: я подготовил Plunk здесь. Перейдите к дочернему элементу.html. Вы видите, что значение myProp равно 'Initial value'. При нажатии на кнопку ничего не происходит, потому что она установлена ​​на readOnly. Но если вы закомментируете это readOnly в строке 19 и затем нажмете кнопку, вы увидите изменение значения. Таким образом, readOnly также предотвращает перезапись значения from в дочернем элементе.


person Doruk Eker    schedule 23.09.2015    source источник
comment
Вы пытались изменить значение в дочернем элементе. Я думаю, что readOnly предназначен только для наблюдателей, которые полимер предоставляет из коробки. Вы должны иметь возможность изменить значение в дочернем элементе в дочерних функциях.   -  person Srik    schedule 23.09.2015
comment
Это именно то, чего я ожидал. Но значение, установленное в readOnly, не меняется, даже если вы попробуете его из дочернего элемента. Я подготовил Plunk и добавил ссылку в исходный вопрос выше. Вы можете увидеть его в действии там.   -  person Doruk Eker    schedule 24.09.2015


Ответы (1)


Используйте _setMyProp(newValue) для изменения значений только для чтения в дочернем элементе. Подробнее об этом можно прочитать на странице https://www.polymer-project.org/1.0/docs/devguide/properties.html#read-only

Обновленный планк http://embed.plnkr.co/ggYJQ4z65Wj4uuBe4kUg/preview

person Srik    schedule 24.09.2015