lang.replaceを使用した単純なテンプレート
ContentPaneのコンテンツ/テンプレートの複雑さに応じて、それを行う簡単な方法の1つは、単純なを使用することlang.replace
です。名前/年齢/誕生日のテンプレートを次のように作成するとします(例cai/personTpl.html
):
<dl>
<dt>Name</dt><dd>{name.firstname} {name.lastname}</dd>
<dt>Age</dt><dd>{age}</dd>
<dt>Birthday</dt><dd>{birthday}</dd>
</dl>
Javascriptで、次のことができます。
require([..other deps.., 'dojo/_base/lang', 'dojo/text!cai/personTpl.html'],
function(..other deps.., lang, personTpl) {
//.. your other code ..
// assuming person[i] is something like:
// {name: {firstname: 'A', lastname: 'B'}, age: 42..}
var cp1 = new dijit.layout.ContentPane({
title:"New Question",
content: lang.replace(personTpl, person[i]),
});
dijit.byId("centerLayout").addChild(cp1);
}
);//~require
dojo / _base / lang :: replaceの詳細については、こちらをご覧ください:http: //dojotoolkit.org/reference-guide/1.8/dojo/_base/lang.html#dojo-base-lang-replace
カスタムウィジェットを使用したより複雑なテンプレート
各タブで使用されるテンプレートがより複雑な場合(たとえば、ウィジェットを単独で使用する場合、イベントを使用する場合など)、(ContentPaneを使用する代わりに)カスタムウィジェットを作成する方がよい場合があります。
たとえば、テンプレートは次のようになります(cai/widgets/personTpl.html
):
<dl>
<dt>Name</dt><dd data-dojo-attach-point='nameNode'></dd>
<dt>Age</dt><dd data-dojo-attach-point='ageNode'></dd>
<dt>Birthday</dt><dd>
<input type='text' data-dojo-type='dijit/form/DateTextBox'
data-dojo-attach-point='bdayInput' />
</dd>
</dl>
そして、ウィジェットは(cai/widgets/Person.js
)にすることができます:
define([ ..other deps.., "dojo/text!cai/widgets/personTpl.html"],
function(..other deps.., personTpl) {
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: personTpl,
name: "unknown",
_setNameAttr: { node: "nameNode", type: "innerHTML" },
age: 0,
_setAgeAttr: { node: "ageNode", type: "innerHTML" },
birthday: new Date(),
_setBirthdayAttr: function(bday) {
this.bdayInput.set("value", bday);
this._set("birthday", bday);
}
}); //~declare
}
); //~define
次に、PersonウィジェットのインスタンスをTabContainerに追加できます。
require([..other deps.., "cai/widgets/Person"],
function(..other deps.., Person) {
//.. your other code ..
// assuming person[i] is something like:
// {name: "Jerry", age: 42, birthday: new Date(), title: "JerryTab"}
var p = new Person(person[i]);
dijit.byId("centerLayout").addChild(p);
}
);//~require
ウィジェット(およびノードにマップされた属性を持つウィジェット)の詳細については、http://dojotoolkit.org/reference-guide/1.8/quickstart/writingWidgets.html#mapping-widget-attributes-to-domnode-attributesを参照してください。