2015-06-15 3 views
1

В polymer 0.5, this.templateInstance.model предусмотрен способ доступа к свойствам, определенным в сфере применения, охватывающей is="auto-binding" (или любой другой) шаблон this элемента.templateInstance.model в Polymer 1,0

Теперь, в polymer 1.0, каков эквивалентный способ доступа к свойствам шаблона is="dom-bind" (или любого другого)?

РЕДАКТИРОВАТЬ:

Например, во фрагменте ниже обоих элементов <my-el-a> и <my-el-b> намерен установить значения counterA и counterB свойств, охватывающий <template is="dom-bind"> «s соответственно.

<my-el-b> делает это успешно с помощью отражающего свойства counter (notify:true).

<my-el-a> намеревается сделать это через «родительский»/templateInstance.model, но сбой. Этот использовался для работы в Polymer 0.5. Как я могу заставить это работать в Polymer 1.0? Другими словами, что эквивалентно для templateInstance.model?

<script> 
 
    ! function() { 
 
    var counterA = 0; 
 
    Polymer({ 
 
     is: 'my-el-a', 
 
     ready: function() { 
 
     counterA += 1; 
 
     this.instanceTemplate.model.counterA = counterA; //used to work in Polymer 0.5 
 
     } 
 
    }) 
 
    }(); 
 
</script> 
 

 
<script> 
 
    ! function() { 
 
    var counterB = 0; 
 
    Polymer({ 
 
     is: 'my-el-b', 
 
     properties: { 
 
     counter: { 
 
      value: 0, 
 
      type: Number, 
 
      notify: true 
 
     } 
 
     }, 
 
     ready: function() { 
 
     counterB += 1; 
 
     this.counter = counterB; 
 
     console.log(this); 
 
     } 
 
    }) 
 
    }(); 
 
</script> 
 

 
<template is="dom-bind"> 
 
    <div>CounterA: <span>{{counterA}}</span> 
 
    </div> 
 
    <div>CounterB: <span>{{counterB}}</span> 
 
    </div> 
 
    <my-el-a></my-el-a> 
 
    <my-el-b counter="{{counterB}}"></my-el-b> 
 
</template>

ответ

3

Это еще не зарегистрированы, но очевидно из source code, что я могу получить доступ к свойствам экземпляра шаблона из dataHost определены как:

var dataHost = (this.dataHost && this.dataHost._rootDataHost) || this.dataHost; 

В контексте примера, приведенного в вопросе, я могу заменить:

this.instanceTemplate.model.counterA = counterA; 

с:

var dataHost = (this.dataHost && this.dataHost._rootDataHost) || this.dataHost; 
dataHost.counterA = counterA; 

в о слова, templateInstance.model заменяется на dataHost.

+0

Я обнаружил 'dataHost' всего лишь минуту назад, и он идеально подходит для моих потребностей. Каковы мысли людей об использовании таких недокументированных функций, может ли это быть рискованным? – nverba

0

свойства, определенные на <template is="dom-bind"> контексте можно получить непосредственно от самого элемента шаблона.

Что вы просите - это анти-шаблон, вы должны использовать систему привязки.

Если было бы понятно, почему вы хотели избежать связующей системы, может возникнуть другой ответ.

Fwiw, нет гарантии, что что-то, что использовалось для работы в 0.5, будет иметь аналог в 1.0. Система данных была полностью заменена.

+0

Как я могу получить доступ к 'является свойством = РОМ bind' изнутри дочерней полимерного элемента? –

+0

Вы должны быть более конкретными. Как вы получаете доступ к одному элементу из другого, зависит от того, где каждый элемент находится в дереве. Кроме того, по возможности используйте привязку вместо получения ссылок на узлы. Например: '' ... now paper-spinner.active привязан к шаблону. активно, и мне никогда не приходилось ссылаться на шаблон. –

+0

Спасибо @Scott. Я отредактировал/расширил свой вопрос. –

0

См:

https://www.polymer-project.org/1.0/docs/devguide/templates.html#handling-events

Хотя это не ясно из документации, я считаю, event.model могут быть добавлены к событиям обожженных изнутри dom-bind, а также. Однако методы modelForElement, itemForElement и indexForElement доступны только на dom-repeat.

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

+1

Спасибо @DocDue. Хотя моя ссылка связана с событиями, мой вопрос о 'templateInstance' был более общим, как в примере, который я добавил. –

0

Просто назначая какое-либо имущество и привязки к нему должно работать, как и сделано в dom-bind тестах - https://github.com/Polymer/polymer/blob/3b0d10b4da804703d493da7bd0b5c22fc6f7b173/test/unit/dom-bind.html#L30 - https://github.com/Polymer/polymer/blob/3b0d10b4da804703d493da7bd0b5c22fc6f7b173/test/unit/dom-bind.html#L65 правопреемником и связываются с value и notifyingvalue.

A working example at JS Bin

Смежные вопросы