2016-08-24 20 views
0

私はdgridを表示するためにテンプレート付きウィジェットで作業しています。ヘッダーとコンテンツが重複していることを除いて、正常に動作しているようです。ここに私のPlnkrコードです。一部の人々は、私の場合には、次のエラーが発生しDijitRegistry、との混合カスタムグリッドを作成提案:またdgridヘッダーと内容が重複しています

Tried to register widget with id==dijit__TemplatedMixin_0 but that id is already registered. 

を何人かの人々が示唆したように私は2つのイベントでリサイズ()メソッドを試してみましたが、それはどちらかの助けにはなりませんでした。ここで

は私のコードです:

index.htmlを

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.10.1/dijit/themes/claro/claro.css" /> 
</head> 
<body class="claro"> 
    <div id="myContainer"></div> 
    <script type="text/javascript"> 
    var dojoConfig = { 
     async: true, 
     parseOnLoad: true 
    }; 
    </script> 
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.10.1/dojo/dojo.js"></script> 
    <script type="text/javascript"> 
    require({ 
    packages: [ 
     { 
      name: 'dgrid', 
      location: '//cdn.rawgit.com/SitePen/dgrid/v0.3.16' 
     }, 
     { 
      name: 'xstyle', 
      location: '//cdn.rawgit.com/kriszyp/xstyle/v0.2.1' 
     }, 
     { 
      name: 'put-selector', 
      location: '//cdn.rawgit.com/kriszyp/put-selector/v0.3.5' 
     }, 
     { 
      name: 'myApp', 
      location: window.location.href.replace(/\/$/, "") 
     } 
    ] 
}, ["dojo/dom", "dojo/_base/array", "myApp/SimpleTemplatedGridWidget", "dojo/domReady!"], function(dom, arrayUtil, MyWidget) { 
     var widget = new MyWidget().placeAt(dom.byId('myContainer')); 
    }); 
    </script> 
</body> 
</html> 

SimpleTempletedGridWidget.js

define([ 
    "dgrid/extensions/DijitRegistry", 
    "dojo/_base/declare", 
    "dgrid/OnDemandGrid", 
    "dijit/_WidgetBase", 
    "dijit/_TemplatedMixin", 
    "dojo/text!./SimpleTemplate.html" 
], 
function (DijitRegistry, declare, Grid, _WidgetBase, _TemplatedMixin, template) { 
    return declare([_WidgetBase, _TemplatedMixin], { 
     templateString: template, //need to add 
     data : [ 
      { first: 'Bob', last: 'Barker', age: 89 }, 
      { first: 'Vanna', last: 'White', age: 55 }, 
      { first: 'Pat', last: 'Sajak', age: 65 } 
     ], 

     columns : { 
      first: 'First Name', 
      last: 'Last Name', 
      age: 'Age' 
     }, 

     postCreate: function() { 
      //myGrid = new (declare([Grid, DijitRegistry]))({ 
      //Including DijitRegistry in the custom grid as above causes the following error: 
      //Tried to register widget with id==dijit__TemplatedMixin_0 but that id 
      //is already registered 
      myGrid = new (declare([Grid]))({ 
       columns: this.columns, 
       idProperty: "id" 
      }, this.AttachGrid); 
      myGrid.renderArray(this.data); 
      myGrid.startup(); 
      //Resize does not fix it 
      myGrid.resize(); 
     }, 

     //People talk about using resizing the grid in onShow event, 
     //but it looks like this event does not fire 
     //source: https://github.com/SitePen/dgrid/issues/249 
     onShow: function(){ 
      this.inherited(arguments); 
      this.myGrid.resize(); 
      console.log("Shown!"); 
     } 
    }); 
}); 

あなたは(サイズを変更呼び出す必要がSimpleTemplate.html

<div data-dojo-attach-point='AttachGrid'></div> 

答えて

1

)お先にどうぞグリッドを配置します(postCreate()ではなく)。あなたは、グリッドウィジェットにリサイズ()関数を追加することで、手動でこれを行うことができます。

postCreate: function() { 
     this.myGrid = new (declare([Grid]))({ 
      columns: this.columns, 
      idProperty: "id" 
     }, this.AttachGrid); 
     this.myGrid.renderArray(this.data); 
     this.myGrid.startup(); 
    }, 

    resize: function() { 
     this.myGrid.resize(); 
    } 

そしてindex.htmlの中:

var widget = new MyWidget().placeAt(dom.byId('myContainer')); 
    widget.resize(); 

ここにあなたのコードのフォークです:plnkr

それでもDijitRegistryのエラーの原因はわかりません。

関連する問題