2014-06-12 18 views
9

Theo dõi How to extend multiple elements with PolymerPolymer multiple inheritence/composition, dựa trên câu trả lời của họ, tôi tự hỏi liệu có thể chia sẻ mixin trên nhiều thành phần web (và nhiều lần nhập) để sử dụng lại chức năng hay không.Có thể chia sẻ mixin trên các thành phần web (và nhập khẩu) trong Polymer không?

Mixins dường như là cách duy nhất để chia sẻ chức năng trên nhiều yếu tố tùy chỉnh. Tuy nhiên, có vẻ như bạn chỉ có thể sử dụng mixin trong một lần nhập. Có nghĩa là, nếu bạn có một mixin, điều đó mang lại cho một thành phần web một chức năng cụ thể (giả sử draggable), bạn không thể kết hợp nó vào việc xây dựng phần tử Polymer của bạn nếu nó không nằm trong cùng một lần nhập.

Có lẽ tôi đã có một cái gì đó sai, nhưng nếu không, nó cảm thấy như việc sử dụng mixin không phải là rất linh hoạt, bởi vì tôi vẫn không thể chia sẻ chức năng trên các thành phần web.

UPDATE:

Như Scott Miles chỉ trong ý kiến ​​của mình ra, nó thể sử dụng mixins trong hơn một nhập khẩu. Tôi chỉ không chắc chắn làm thế nào để làm điều đó và nó quay ra, rằng nó rất thẳng về phía trước.

Giả sử chúng ta có một mixin nên được chia sẻ trên nhiều thành phần, nhưng các thành phần được phân phối qua nhiều lần nhập. Tất cả những gì bạn phải làm là xác định mixin trong nhập khẩu riêng của mình trên đối tượng window. Vì vậy, ví dụ:

shared.html

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

Và sau đó, tái sử dụng mixin rằng trong một thành phần trong nhập khẩu khác, cũng đơn giản như nhập khẩu shared.html.

my-component.html

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

Từ thời điểm đó trở đi, sharedMixin có sẵn như là đối tượng toàn cầu trong nhập khẩu rằng:

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

Tôi hy vọng giúp những người khác. Tôi sẽ viết một bài đăng blog về điều đó và sẽ liên kết nó ở đây.

UPDATE 2

Tôi đã viết một bài đăng blog ở đây: http://pascalprecht.github.io/2014/07/14/inheritance-and-composition-with-polymer/

+0

Tại sao không có mỗi thành phần khai báo một thành phần được chia sẻ Một cái gì đó như http: // www .polymer-project.org/docs/polymer/polymer.html # global. Đây là loại lõi kiểu: https://github.com/Polymer/core-style/blob/master/core-style.html#L11 – ebidel

+0

Bạn nói đúng, điều đó sẽ giải quyết được vấn đề đó. Không nghĩ về 'kiểu lõi' đó thực sự cư xử chính xác như thế. Tôi sẽ cập nhật câu hỏi của mình cho phù hợp. – PascalPrecht

+0

Câu lệnh này 'bạn chỉ có thể sử dụng một mixin trong một lần nhập' là không chính xác. Nhập khẩu không được tự động scoped. –

Trả lời

1

Để sử dụng một thành phần toàn cầu giống như là cách khuyến khích để đi.
tạo <name-you-like> và sử dụng get/set để thay đổi nó (bạn cũng có thể sử dụng các thuộc tính mặc dù chúng chỉ là buồn chuỗi).

từ Polymer API guide bạn sẽ thấy làm việc ví dụ (đẹp trai) như thế này:

<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> 

Và chơi với chúng bằng javascript getters ES5/setters chẳng hạn như trong trường hợp đề cập ở trên sẽ giống như

<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

chỉ là một fyi, thẻ '

1

Đây là bây giờ được giải quyết bằng tính năng Behaviors.

Ví dụ:

my-behavior.html:

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

my-element.html:

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

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

my-khác-element.html:

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

<script> 
    Polymer({ 
    is: 'my-other-element', 
    behaviors: [MyBehavior] 
    }); 
</script> 
Các vấn đề liên quan