2015-06-23 42 views
1

已經創建並使用了我自定義的聚合物元素,它是一個表格。現在,我想使用我的表中的目錄中的複選框元素。聚合物1.0 ..用自定義元素導入目錄元素會引發錯誤

DuplicateDefinitionError: a type with name 'dom-module' is already registered

這是我如何創建我的自定義元素:

<!-- Imports polymer --> 
<link rel="import" href="polymer/polymer.html"> 
<script src="underscore-min.js"></script> 

<!-- Defines element markup --> 
<dom-module id="custom-table" > 
    <template> 
    <style> 
    ul {list-style-type:none; display:block} 
    ul li {display:inline; float:left; padding:20px; width:1.5em; border-bottom:1px solid #eee} 
    </style> 
    <h2>{{title}}</h2> 

    <table id="dataTable"> 
    <thead id="tableHead"></thead> 
    <tbody id="tableBody"></tbody> 
    </table> 

    </template> 
</dom-module> 

<!-- Registers custom element --> 
<script> 
Polymer({ 
    is: 'custom-table', 

    // Fires when an instance of the element is created 
    created: function() { 
    }, 

    // Fires when the local DOM has been fully prepared 
    ready: function() { 
    var context= this; 
    this.pageNo=0; 
    this.totalPages=0; 
    // set the default paging size: 
    if(this.page== null|| this.page==undefined) 
    this.page=10; 

    // delegate the change selection handler to the table body 
    this.$.tableBody.addEventListener("click",function(e){ 

    if(e.target && e.target.nodeName == "INPUT") ; 
    { 
     context.changeSelection(e.target); 
    } 

    }); 
    }, 

    // Fires when the element was inserted into the document 
    attached: function() {}, 

    // Fires when the element was removed from the document 
    detached: function() {}, 

    // Fires when an attribute was added, removed, or updated 
    attributeChanged: function(name, type) { 

    alert("changed"); 

    }, 

    loadData: function(columns,data){ 

    this.data = data; 
    // add the selected property to the values 
    for(var i=0;i<this.data.length; i++) { this.data[i].Selected = false;} 
    this.filteredData=this.data; 
    this.columns = columns; 

    //initialize the filteredData 
    this.filteredData=data; 
    // calculate the total number of pages 
    this.totalPages= Math.ceil(data.length/this.page); 


    this.drawTableHeader(); 
    _.defer(this.applyFilters,this); 
    _.defer(this.drawTableBody,this); 


    }, 
    drawTableHeader:function(){ 

    var columns = this.columns; 
    // load the header 
    var headTr = document.createElement('tr'); 
    //add a blank header for the check box; 
    var th=document.createElement('th'); 
    headTr.appendChild(th); 
    for(var i = 0; i<columns.length ;i++) 
    { 


     var td=document.createElement('th'); 
     // if the column is sortable then add the event listener for sorting it 
     if(columns[i].Sortable) 
     { 

      td.addEventListener("click",function(){ this.sortBy(columns[i].Title); }); 
     } 
     td.innerText = columns[i].Title; 
     headTr.appendChild(td); 
    } 
    this.$.tableHead.appendChild(headTr); 

    }, 
    drawTableBody: function(context){ 
    // this is a defered function 
    var context = context; 
    // get the number of items according to the current page number 

    var pageItems= context.filteredData.slice((context.page*context.pageNo),((context.page*context.pageNo)+context.page)); 
    console.log(pageItems); 
    // print the page items 

    for(var i=0; i < pageItems.length; i++) 
    { 
     var currItem = pageItems[i]; 
     var tr= document.createElement("tr"); 

     // add the check box first 
     var checkbox= document.createElement("input"); 
     checkbox.type="checkbox"; 
     checkbox.checked=pageItems[i].Selected; 
     var ItemId = currItem.Id; 
     checkbox.setAttribute("data-ItemId",ItemId-1); 
     var td=document.createElement('td'); 
     td.appendChild(checkbox); 
     tr.appendChild(td); 

     // for every column specified add a column to it 

     for(var j = 0; j< context.columns.length; j++) 
     { 
      var td=document.createElement("td"); 
      td.innerText= pageItems[i][context.columns[j].Title]; 
      tr.appendChild(td); 
     } 

     //append the row to the table; 
     context.$.tableBody.appendChild(tr); 


    } // end for i 

    }, 
    applyFilters:function(context){ 

     if(context.filter) 
     { 
      alert("filterApplied"); 
     } 

    }, 
    changeSelection:function(checkbox){ 

     var ItemId = checkbox.getAttribute("data-ItemId"); 
     this.data[ItemId].Selected= checkbox.checked; 
     console.log(this.data[ItemId]); 
    }, 
    properties:{ 

    title :String, 
    columns:Array, 
    data:Array, 
    page:Number, 
    filters:Object, 
    Selectable:Boolean 

    } 
}); 
</script> 

這裏

然而,當我引用的複選框的html文件在我的索引頁,我不斷收到此錯誤是我的索引頁面看起來像:

<!doctype html> 
<html> 
<head> 

    <meta charset="utf-8"> 
    <title>&lt;my-repo&gt;</title> 

    <!-- Imports polyfill --> 
    <script src="webcomponents-lite.min.js"></script> 

    <!-- Imports custom element --> 

    <link rel="import" href="my-element.html"> 
    <link rel="import" href="bower_components/paper-checkbox/paper-checkbox.html"> 

</head> 
<body unresolved> 

    <!-- Runs custom element --> 
    <custom-table title="This is data table"></custom-table> 
    <script> 

document.addEventListener("WebComponentsReady",function(){ 

var data = [{'Id':1,'firstName':'aman',age:25},{'Id':2,'firstName':'gupta',age:25}]; 
var cols = [{Title:'firstName',Sortable:true},{Title:'age',Sortable:false}]; 
var a = document.querySelector('my-element'); 

a.loadData(cols,data); 


}); 

</script> 
</body> 
</html> 

我剛剛開始與聚合物,我不是很知道什麼是怎麼回事.. 預先感謝您:)

回答

1

我的問題是什麼..

我的自定義元素被引用不同Polymer.html文件。

我傻:d

+1

你能詳細說一下嗎? – socca1157

+0

index.html中已經有了聚合物庫的參考文獻。 而在我的自定義元素也是從不同的位置導入聚合物。基本上這是一個noob錯誤,我在兩個不同的位置有兩個獨立的聚合物庫文件 –

1

我在Windows上使用Polymer Starter Kit Yeoman generator和我有同樣的問題:

Error: DuplicateDefinitionError: a type with name 'dom-module' is already registered

這個錯誤引發在Firefox控制檯。 Chrome工作正常。

與發電機(例如:yo polymer:el my-element)創建的組件具有這polymer.html進口:

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

基座路徑與 「反斜槓」 中所述。 在我創造了我自己的一些自定義的聚合物分子,我進口polymer.html有:

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

我認爲這會導致某種形式的重複。爲了解決這個問題,我只更改了所有自動創建的導入,只使用正斜槓/

希望這可以幫助別人。

相關問題