2016-03-03 6 views
1

Я использую страницы неон-анимации, и я хочу узнать, установлен ли атрибут на одном из его дочерних элементов. Из того, что я понимаю, вы можете просто добавить любой атрибут, который вам нужен, и если он находится в теге, он будет разрешен к true, если у него нет набора значений. Например:Полимер получает атрибут от элемента

<neon-animation-pages id="pages"> 
    <div awesome>This one is awesome</div> 
    <div>This one is not</div> 
    <div>This one is not</div> 
</neon-animation-pages> 

Выше я создал мой собственный атрибут называется: удивительный

В моем коде я использую это:

_onIronSelect: function(){ 
    console.log(this.$.pages.selectedItem.getAttribute('awesome')); 
} 

консоль только выплевывает «нулевой» или «» в зависимости от имеет ли он мой удивительный атрибут. Я могу попытаться заставить его работать, но я думал, что он должен был разрешить true или false, boolean?


Нашел в документации

Булевы свойства устанавливаются на основе наличия атрибута: если атрибут существует вообще, свойство имеет значение истина, независимо атрибута стоимость. Если атрибут отсутствует, свойство получает значение по умолчанию.

на https://www.polymer-project.org/1.0/docs/devguide/properties.html

Так что я полагаю, я должен пытаться получить значение имущества SelectedItem в> устрашающий. Как я могу это сделать?

+0

Я думаю, это потому, что 'awesome' не присваивается значение' устрашающий = "SomeValue" '. Что вы ожидаете получить от 'this. $. Pages.selectedItem.getAttribute ('awesome')'? –

ответ

0

Может быть, вы хотите

this.$.pages.selectedItem.hasAttribute('awesome') 
+0

только что реализованный getAttribute работает так, как должен. Мне действительно нужно получить значение или одну из свойств selectedItem – Gilberg

1

Там важное различие между свойств и атрибутов. Свойства - это свойства JavaScript на объекте DOM. Атрибуты в основном предоставляют строковую базу данных ключ/значение, которая может быть инициализирована из разметки.

Полимерные документы, которые вы цитируете, говорят о свойства. Если элемент Polymer обладает свойством, awesome, указанным в объекте properties с типом Boolean, он будет десериализоваться до true или false, как описано.

Это сервис Polymer, потому что это общий шаблон для элементов HTML. Например, если вы устанавливаете атрибут на элемент HTML, браузер автоматически отражает, что соответствует свойству id. Но если вы добавите общий атрибут, который этот элемент не знает (например, awesome), атрибут не отображается как свойство.

Если вы хотите проверить наличие или отсутствие атрибута на любом элементе (стандартном HTML или Полимере), используйте hasAttribute, как сказал @ günter-zöchbauer. Согласно MDN, getAttribute во всех современных браузерах возвращает null, когда атрибут отсутствует, но, видимо, это не всегда так, поэтому hasAttribute, вероятно, более безопасен, а также более ясен.

https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute

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