2

jQueryを使用して行を動的に挿入しようとしています。コンボボックスが行に表示されないことを除いて、次のコードで正常に動作しています。コンボボックスを解析しましたが、まだ来ておらず、行に「Design Abbr [Widget dijit.form.ComboBox, solutionAbbr1]」と表示されています。実際、私はここでコンボボックスを期待しています。この問題を解決するために誰か助けてくれませんか。jquery と dojo の両方に 1.8 バージョンを使用しています。

 var maxcount = 0;
 require(["dojo/parser", "dojo/dom", "dojo/store/Memory", "dijit/form/ComboBox", "dojo/domReady!"],
 function(parser, dom, Memory, ComboBox){
        this.addBlock =  function() {
        maxcount += 1;
        var stateStore = new Memory({data: [{name:"Alabama", id:"AL"},
{name:"Alaska", id:"AK"},{name:"Armed Forces the Americas", id:"AA"},
{name:"California", id:"CA"},{name:"Connecticut", id:"CT"}]});
        var comboBoxId = "solutionAbbr"+maxcount;
        var comboBox = new ComboBox({id: comboBoxId, name: "solutionAbbr",
value: "California",store: stateStore,searchAttr: "name"}, "stateSelect");
        //parser.parse.then(function(comboBox) {document.getElementById("solutionAbbr"+maxcount)});
        parser.parse(dijit.byId(comboBoxId));
        //alert(dijit.byId(comboBoxId).get('value'));


    $('<tr id="idForNewRow'+maxcount+'">'
        +'<td colspan="4">'
            +'<table id="idForBorder">'
                +'<tr class="even">'
                    +'<th align="left"><font color="red">Design Abbr</font></th>'
                    +'<td align="left" valign="bottom" colspan="3">'
                    +comboBox+'</td>'
                +'</tr>'
        +'</table></td></tr><tr><td colspan="4"><a href="javascript:removeRow('
            +maxcount+')">Remove</a>').insertAfter("[id*=idForNewRow]:last");
    }
});
4

1 に答える 1

0

挿入では、comboBox.domNode:: を使用する必要があります。

 $('<tr id="idForNewRow'+maxcount+'">'
    +'<td colspan="4">'
        +'<table id="idForBorder">'
            +'<tr class="even">'
                +'<th align="left"><font color="red">Design Abbr</font></th>'
                +'<td align="left" valign="bottom" colspan="3">'
                +comboBox.domNode+'</td>'
            +'</tr>'
    +'</table></td></tr><tr><td colspan="4"><a href="javascript:removeRow('
        +maxcount+')">Remove</a>').insertAfter("[id*=idForNewRow]:last");

また、手動でページに配置する場合は、新しい ComboBox コンストラクターから「stateSelect」を取り出すこともできます。これは、ウィジェットをページ上に配置する場合に domid を配置する場所です。

また、parser.parse コマンドを使用する代わりに、アプリケーションがページに挿入された後にスタートアップを呼び出す必要があります::omboBox.startup()

EDIT(comboBox.domNodeがノードオブジェクトを作成するため、上記は機能しません)::より簡単にするために、順序を逆にします。最初にhtmlを追加してからウィジェットを作成すると、ウィジェットはそれ自体をページに追加できるようになります

    $('<tr id="idForNewRow' + maxcount + '">' + '<td colspan="4">' + 
      '<table id="idForBorder">' + 
      '<tr class="even">' + 
      '<th align="left"><font color="red">Design Abbr</font></th>' + 
      '<td align="left" valign="bottom" colspan="3" id="select' + maxcount + '"></td>'+
      '</tr>'+
    '</table></td></tr><tr><td colspan="4">'+
      '<a href="javascript: removeRow('+maxcount+')">Remove</a>').insertAfter("[id*=idForNewRow]:last");

    var stateStore = new Memory({data: [{name:"Alabama", id:"AL"},
    {name:"Alaska", id:"AK"},
    {name:"Armed Forces the Americas", id:"AA"},
    {name:"California", id:"CA"},
    {name:"Connecticut ", id:"CT"}]});

    var comboBoxId = "solutionAbbr"+maxcount;
    var comboBox = new ComboBox({id: comboBoxId, name: "solutionAbbr",
    value: "California",store: stateStore,searchAttr: "name"}, "select"+maxcount);
    comboBox.startup();

http://jsfiddle.net/uLCS6/3/に見られるように

于 2013-07-16T14:48:54.503 に答える