私はDojo 1.8 フレームワークを使用して、他のメニュー ウィジェットを含むウィジェットを作成しています。そのインスタンスを作成すると表示されますが、基本的なテンプレート要素のみが表示され、詳しく調べてみると、メニュー ウィジェットは追加されていません。次に、(ボタンをクリックして) 2 番目のインスタンスを作成すると、メニューを含めて正しく表示されます。
これは本当に私を混乱させます、何かアイデアはありますか?
ところで、ウィジェット インスタンスで startup() を呼び出しています。
これが私のテンプレートのコードです...
<div class="${!baseClass}ConfigPanel">
<div data-dojo-attach-point="heading">Configure data</div>
<div id="menuContainer" data-dojo-attach-point="menu"></div>
</div>
これが私のウィジェットのコードです...
define(
["dojo/_base/array",
"dijit/Menu",
"dijit/MenuItem",
"dijit/PopupMenuItem",
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dojo/text!gdv/chart/configuration/panel/chartConfigTemplate.html",
"dojo/domReady!"],
function (ArrayUtil, Menu, MenuItem, PopupMenu, declare, WidgetBase, TemplatedMixin, template){
var _menuData = [{title:"Region", data:["Region1", "Region2", "Region3"]},
{title: "Variable", data:["variable1", "variable2", "variable3"]},
{title: "Period", data:["period1", "period2"]},
{title: ["latest", "rt1", "rt2"]}];
/**
* Build menu items up with a popup menu style
*/
function buildMenu(nodeId, menuItems){
var mainMenu = new Menu({label: "main menu"}, nodeId);
var subMenuCollection = [];
var subMenu;
ArrayUtil.forEach(menuItems, function(item, index){
subMenu = new Menu({label: item.title});
subMenuCollection.push(subMenu);
//loop through each item in data and create a new menu item from it
ArrayUtil.forEach(item.data, function(subItem, subIndex){
subMenu.addChild(new MenuItem({label: subItem}));
});
//set the sub menu to popup from the main menu
mainMenu.addChild(new PopupMenu({label: item.title, popup: subMenu}));
});
//create the menus
mainMenu.startup();
//start each sub menu
ArrayUtil.forEach(subMenuCollection, function (item, index){
item.startup();
});
}
//return a new widget class
return declare([WidgetBase, TemplatedMixin], {
templateString: template,
baseClass: "plumePlots",
//when dom structure is ready but before page insertion
postCreate: function(){
//run all parent postCreate functions
this.inherited(arguments);
var menuNode = this.menu;
buildMenu(menuNode.id, _menuData);
}
});
}
)