2014-06-12 1 views
9

후속 조치로 How to extend multiple elements with PolymerPolymer multiple inheritence/composition의 답을 바탕으로 여러 웹 구성 요소 (및 여러 가져 오기)에서 mixins를 공유하여 기능을 재사용 할 수 있는지 궁금합니다.Polymer에서 웹 구성 요소 (및 가져 오기)간에 mixins를 공유 할 수 있습니까?

믹스는 여러 사용자 지정 요소에서 기능을 공유하는 유일한 방법 인 것처럼 보입니다. 그러나 하나의 가져 오기 내에서만 믹스 인을 사용할 수있는 것처럼 보입니다. 즉, 웹 구성 요소에 특정 기능 (예 : draggable)을 제공하는 믹스 인이있는 경우 동일한 가져 오기에없는 경우 해당 요소를 Polymer 요소의 구성에 혼합 할 수 없습니다.

아마 뭔가 잘못 됐을 수도 있지만 그렇지 않다면 mixins를 사용하는 것이 매우 유연하지 않습니다. 웹 구성 요소간에 기능을 공유 할 수 없기 때문입니다.

UPDATE : 스콧 마일 밖으로 자신의 의견에서 지적

, 하나 개 이상의 수입이나 mixin을 사용하는 수 있습니다. 나는 그 일을하는 방법을 잘 모르겠다. 그리고 그것은 매우 솔직하다.

여러 구성 요소에서 공유해야하는 믹스 인이 있지만 구성 요소가 많은 가져 오기에 분산되어 있다고 가정 해 보겠습니다. 오직 하나만해야 할 일은 window 개체에서 자체 믹스를 정의하는 것입니다. 그래서 예를 들면 :

shared.html

<script> 
    window.sharedMixin = { 
    // shared functionality goes here 
    }; 
</script> 

은 그리고 다른 수입의 다른 구성 요소가 믹스 인을 재사용, shared.html를 가져 오는만큼 간단합니다.

Polymer('my-component', Platform.mixin({ 
    // my-component logic 
}, sharedMixin); 

내가 그 다른 사람을 도움이되기를 바랍니다 : 그 시점에서

<link rel="import" href="path/to/shared.html"> 

내-component.html, sharedMixin는 수입 내에서 전역 객체로 사용할 수 있습니다. 그것에 대한 블로그 게시물을 작성하고 여기에 링크 할 것입니다.

내가 여기에 블로그 게시물을 작성했습니다 2

UPDATE : http://pascalprecht.github.io/2014/07/14/inheritance-and-composition-with-polymer/

+0

각 구성 요소가 공유 구성 요소를 선언하지 않도록하십시오. http : // www와 같은 것 .polymer-project.org/docs/polymer/polymer.html # global. 이것은 코어 스타일이하는 일종입니다 : https://github.com/Polymer/core-style/blob/master/core-style.html#L11 – ebidel

+0

맞아요, 그 문제를 해결할 것입니다. 그 '핵심 스타일'이 실제로 실제로 그렇게 행동한다고 ​​생각하지 않았습니까? 그에 따라 내 질문을 업데이트하겠습니다. – PascalPrecht

+0

'이 가져 오기 내에서 mixin 만 사용할 수 있습니다.'라는 문구가 잘못되었습니다. 가져 오기는 자동으로 범위가 지정되지 않습니다. –

답변

1

글로벌과 같은 구성 요소를 사용하려면 갈 권장되는 방법입니다.
<name-you-like>으로 만들고 get/set을 사용하여 변경하십시오 (또한 슬픈 문자열 임에도 불구하고 속성을 사용할 수 있음).

Polymer API guide에서이 같은 (잘 생긴) 예 작업 볼 수 있습니다 :

<polymer-element name="app-globals"> 
    <script> 
    (function() { 
    // these variables are shared by all instances of app-globals 
    var firstName = 'John'; 
    var lastName = 'Smith'; 

    Polymer({ 
     ready: function() { 
     // copy global values into instance properties 
     this.firstName = firstName; 
     this.lastName = lastName; 
     } 
    }); 
    })(); 
    </script> 
</polymer-element> 

를 그리고 자바 스크립트 ES5 게터를 사용하여 그들과 함께 플레이/등 위에서 언급 한 경우와 같이 호텔은

과 같을 것이다
<polymer-element name="app-globals"> 
    <script> 
    (function() { 
    // these variables are shared by all instances of app-globals 
    var firstName = 'Arnold'; 
    var lastName = 'Schwarzenegger'; 

    Polymer({ 
     ready: function() { 
     // copy global values into instance properties 
     this.firstName = firstName; 
     this.lastName = lastName; 
     }, 
     get fullTerminatorName() { 
     return this.firstName + ' ' + this.lastName; 
     } 
    }); 
    })(); 
    </script> 
</polymer-element> 

I'll be back.

+0

그냥 fyi, Polymer 요소 안에있는 '

1

이것은 이제 Behaviors 기능으로 해결되었습니다.

예 :

내-behavior.html :

<script> 
    MyBehavior = { 
    properties: {}, 
    listeners: [], 
    _myPrivateMethod: function(){} 
    // etc. 
    }; 
</script> 

내-element.html :

<link rel="import" href="my-behavior.html"> 

<script> 
    Polymer({ 
    is: 'my-element', 
    behaviors: [MyBehavior] 
    }); 
</script> 

내 - 기타 - element.html :

<link rel="import" href="my-behavior.html"> 

<script> 
    Polymer({ 
    is: 'my-other-element', 
    behaviors: [MyBehavior] 
    }); 
</script> 
관련 문제