Вернуть простое значение из полимерного элемента?

Я успешно использовал core-ajax для передачи объекта json, но я хочу написать собственный элемент, который может передавать простые значения. Вот что у меня есть, но оно не работает.

Элемент testOutput

<link rel="import" href="../polymer/polymer.html">
<polymer-element name="testOutput">
    <template>
        This doesn't do anything but output a value.
    </template>
    <script>
        Polymer('testOutput', {
            response: "MyValue"
        });
    </script>
</polymer-element>

Элемент testInput

<link rel="import" href="../polymer/polymer.html">
<polymer-element name="testInput" noscript attributes="input">
    <template>
        Here is the value from the other element:
        <h1>{{input}}</h1>
    </template>
</polymer-element>

index.html

<testOutput response="{{output}}"></testOutput>
<testInput input="{{output}}"></testInput>

вывод

Это ничего не делает, кроме вывода значения.

Вот значение из другого элемента:


person JOATMON    schedule 04.08.2014    source источник
comment
См. этот пост: stackoverflow.com/q/25050120/723693   -  person ain    schedule 04.08.2014
comment
Я должен был отметить, что я использую шаблон автоматической привязки. Извини.   -  person JOATMON    schedule 04.08.2014


Ответы (3)


Мне просто нужно было опубликовать переменную ответа в моем элементе вывода. Вы можете сделать это, включив его в атрибуты или используя функцию публикации.

<polymer-element name="testOutput" attributes="response">

or

    Polymer('testOutput', {
        publish: {
            response: "MyValue"
        }
    });
person JOATMON    schedule 04.08.2014

Я думаю, что ваш ответ должен быть функцией.

Polymer('testOutput', {
        response: function() { return "MyValue" };
    });
person tire0011    schedule 04.08.2014

Я думаю, есть два способа сделать это

Первый способ

Вам нужно создать элемент, в котором вы хотите получить данные:

<polymer-element name="first-element">
    <template>

    </template>
    <script>
    Polymer('first-element',{
        needPass: 'I am Passed'
    });
    </script>
</polymer-element>

После того, как вам нужно получить первый элемент с помощью querySelector и получить данные

<link rel="import" href="../../bower_components/polymer/polymer.html">

<polymer-element name="second-element">
    <template>
        <style>
            :host{
                width: 100%;
                height: 100%;
            }
        </style>
        <h1>{{passed}}</h1>
    </template>
    <script>
    Polymer('second-element',{

        passed: '',
        ready: function(){

            var first_el = document.querySelector('first-element');
            this.passed = first_el.needPass;
        }
    });
    </script>
</polymer-element>

Чем вызывать элементы в свой индекс

<first-element></first-element>
<second-element></second-element>

Второй способ

Или вы можете вызвать первый элемент во второй элемент

первый элемент:

<link rel="import" href="../../bower_components/polymer/polymer.html">

<polymer-element name="first-element" attributes="needPass">
    <template>

    </template>
    <script>
    Polymer('first-element',{
        needPass: 'I am Passed'
    });
    </script>
</polymer-element>

второй элемент

<link rel="import" href="../../bower_components/polymer/polymer.html">

<link rel="import" href="first-element.html">

<polymer-element name="second-element">
    <template>
        <style>
            :host{
                width: 100%;
                height: 100%;
            }
        </style>
        <first-element needPass="{{needPass}}"></first-element>
        <h1>{{needPass}}</h1>
    </template>
    <script>
    Polymer('second-element',{
        ready: function(){
        }
    });
    </script>
</polymer-element>

и вызвать в индекс только второй элемент

Надеюсь, это поможет вам.

PS: я проверил код.

person Donearh    schedule 05.08.2014