答えは、いいえ、そのようなモジュールはありません。派生ダイアログを作成する必要があります。
必要なものを見てみましょう。
- 現在のグリッド
- グリッド レイアウト (セルタイプ)
- 名前とラベル (構造)
pr-grid で定義された「コンテンツの追加」ボタンが 1 つあり、このボタンがそのグリッドの ID を「認識」していると仮定すると、その onClick 関数はダイアログでフォームを起動する必要があります。
dijit.form ウィジェットがありますが、 のcellTypes
下に存在するさまざまな定義済み もありますdojox/grid/cells/_base.js
。タイプとウィジェットが 1 対 1 のマップを作成してみましょう。
var map = [{
type: 'dojox.grid.cells.Cell',
dijit: 'dijit.form.TextBox'},
{
type: 'dojox.grid.cells.Bool',
dijit: 'dijit.form.CheckBox'},
{
type: 'dojox.grid.cells.Select',
dijit: 'dijit.form.Select'},
{
type: 'dojox.grid.cells.DateTextBox',
dijit: 'dijit.form.DateTextBox'}
];
addContents 関数では、dojox.grid.DataGrid の「編集可能」機能を利用します。そのようなものがあることがわかっている場合、確かに DOM を生成する関数 pr-cell もあります。これは、任意の cellType に存在するformatEditing関数です。
// for instance
dojox.grid.cells.Select.prototype.formatEditing( /* value */ "", /* row */ -1);
必要なのは、ダイアログに表示するコンテンツを作成することだけです。以下では、上記の機能を使用して、dijit.Dialog での表示に適したマークアップを dijit に提供します。
function addContents(gridId) {
var grid = dijit.byId(gridId);
var contents = ['<form action="MySubmitUrl" data-dojo-type="dijit.form.Form"><table>'];
dojo.forEach(grid.layout.cells, function(cell, idx) {
var szHtml = cell.formatEditing("", -1);
var dijitType = map.filter(function(e) {
return e.type == cell.declaredClass;
})[0].dijit;
var name = grid.structure[0][idx].field;
var label = grid.structure[0][idx].name;
var elementMod = ' data-dojo-type="' + dijitType + '" id="' + name + '" name="' + name + '" ';
contents.push('<tr><td>');
contents.push('<label for="' + name + '">' + label + ': </label>');
contents.push('</td><td>');
contents.push(szHtml.replace(/^([^\ ]*)/, "$1" + elementMod));
contents.push('</td></tr>');
});
contents.push('</table></form>');
var dialog = new dijit.Dialog({
content: contents.join("")
});
dialog.show();
}
コンテンツは簡単にスタイルを設定でき、送信/キャンセル ボタンも提供する必要がありますが、アイデアが得られると確信しています。ランニングサンプル
それがどのように実行されるか教えてください(コンボボックス/日時タイプをテストしていません)