2015-08-05 3 views
0

У меня есть пользовательский виджет:Dojo пользовательского виджета не оказывающие внутри панели содержимого

define([ 
     ......], 

function (...){ 

return decalre('ownerWidget', [....],{ 

templateString: template, 

postCreate: function() { 

    this.inherited(arguments); 

    var data ={ 

    identifier:'id', 
    label: 'id', 
    items: [{ 
      id:'28' 
      owner: 'Fred', 
      attendingId: '1', 
      numberOfVisits: '3', 
      vetCostsThisYear: '4', 
      complaints: '0', 
      children[{ 
       id : '29', 
       pet:'Mario', 
       numberOfVisits: '3', 
       vetCostsThisYear: '4', 
       complaints: '0' 

      }] 

    }] 
}; 

var store = new ItemFileWriteStore({data:data}); 
var model = new ForestStoreModel({store : store, childrenAttrs: ['children']}); 

var layout = [ 
{name: 'Owner', field:'owner', width: '40%'}, 
{name: 'Pet', field: 'pet', width: '40%'}, 
{name: 'Attending Id', field:'attendingId', width: '5%'}, 
{name: 'Visits', field: 'numberOfVisits', width: '5%'}]; 

var gridTree = new LazyTreeGrid({ 
    treeModel: model, 
    structure: layout 
}, document.createElement('div')); 


this.gridTreeNode.appendChild(gridTree.domNode); 
} 
}); 

}); 

шаблон для этого:

<div data-dojo-attach-point="gridTreeNode" style="height: 100%; width: 100%"></div> 

виджет затем объявлен в других виджетах ШАБЛОН как так:

<div class="grid" data-dojo-attach-point="byOwner" data-dojo-type="dijit/layout/ContentPane"></div> 

javascript для вышеуказанного заявления:

this.byOwner.set('title', "Owner"); 
this.byOwner.set('content', "ownerWidget"); 

Я получаю серый фон, и вкладка отображается с правильным заголовком, но сетка не кажется рендерингом, я вижу, что есть дерево дерева для сетки, но я просто не вижу сетку на стр.

Я не уверен, что здесь отсутствует, нет никаких ошибок или предупреждений.

Dojo version 1.10.0

+0

Сначала я могу сказать: у вас есть опечатка 'decalre', вы забыли назвать' gridTree.startup() '... Там вероятно, больше, чем это ... – ben

+0

Объявление действительно было опечатки, я случайно удалил его и опечатки, когда я перепечатал его в вопрос, мое понимание додзе заключается в том, что если вы декларативно объявляете виджет, то запуск запускается парсером? – user1383163

+0

«startup» компонентов, созданных парсером, автоматически выполняется (например, при использовании декларативного синтаксиса). Однако в вашем случае вы программно создали 'gridTree', поэтому вам нужно вручную вызвать' startup' – ben

ответ

0

Это проблема с запуском. Вам нужно вручную запустить компонент в нужный момент (иначе расчет идет не так). Вызов placeAt метод будет обрабатывать это для вас (см, последнюю строку):

define([ 
    /*......*/ 
], 

function(/*...*/) { 

    return declare('ownerWidget', [ /*....*/ ], { 

     templateString: template, 

     postCreate: function() { 

      this.inherited(arguments); 

      var data = { 

       identifier: 'id', 
       label: 'id', 
       items: [{ 
        id: '28' 
        owner: 'Fred', 
        attendingId: '1', 
        numberOfVisits: '3', 
        vetCostsThisYear: '4', 
        complaints: '0', 
        children[{ 
         id: '29', 
         pet: 'Mario', 
         numberOfVisits: '3', 
         vetCostsThisYear: '4', 
         complaints: '0' 

        }] 

       }] 
      }; 

      var store = new ItemFileWriteStore({ 
       data: data 
      }); 
      var model = new ForestStoreModel({ 
       store: store, 
       childrenAttrs: ['children'] 
      }); 

      var layout = [{ 
       name: 'Owner', 
       field: 'owner', 
       width: '40%' 
      }, { 
       name: 'Pet', 
       field: 'pet', 
       width: '40%' 
      }, { 
       name: 'Attending Id', 
       field: 'attendingId', 
       width: '5%' 
      }, { 
       name: 'Visits', 
       field: 'numberOfVisits', 
       width: '5%' 
      }]; 

      var gridTree = new LazyTreeGrid({ 
       treeModel: model, 
       structure: layout 
      }, document.createElement('div')); 

      gridTree.placeAt(this.gridTreeNode, 'last'); 
     } 
    }); 

}); 
Смежные вопросы