0

データグリッドにあるボタンに関数イベントを追加する際に問題があります。
グリッドのデータは json-rest-store によってロードされ、ボタン列もそれとともにロードされます。
これを追加する必要があるときはいつでも:

Spring.addDecoration(new Spring.AjaxEventDecoration({elementId: button.id, event:'onclick', params: { _eventId: "details", fragments: "content" }}));

ロードの準備がまだ整っていないため、ID が存在しないと表示されます。

私は次のように defered を使用しています:

function formatDetails(fields, rowIdx, cell){

        var buttonEditLabel = dojo.byId('buttonEdit').innerHTML;

        var buttonEdit = new dijit.form.Button({
            id: rowIdx,
            type : "submit",
            label: buttonEditLabel,
            showLabel: true
        });


        dojo.style(buttonEdit.domNode, "width", "95px"); 
        dojo.style(buttonEdit.domNode, "textAlign", "center");
        dojo.style(buttonEdit.domNode.firstChild, "display", "block");

      var id;
     var deferred = new Deferred(function(reason){
          id = dojo.byId(buttonEdit.id);
      });

    deferred.progress(update);
    deferred.resolve(value);

     deferred.then(function(value){
      Spring.addDecoration(new Spring.AjaxEventDecoration({elementId: buttonEdit.id,   event:'onclick', params: { _eventId: "details", fragments: "content" }}));
      }, function(err){

      }, function(update){

      });

      return buttonEdit;
}

私は
何が間違っているのですか?

4

1 に答える 1

1

これは、遅延オブジェクトを返す基本的な dojox グリッド フォーマッターです。これは、新しい dojo/Deferred 1.7 API では機能しません。(私はちょうどテストしました)。したがって、deferred とグリッドを使用する場合は、代わりに dgrid を使用するようにアップグレードする必要があります。

fmtItem: function(value, idx){
                if(!this.store.isItem(value)){
                    return " ";
                }
                var d = new dojo.Deferred();
                var fx = function(items){
                    if(items.length){
                        d.callback(this.store.getLabel(items[0]))
                    }else{
                        d.callback(" ");
                    }
                };
                window.setTimeout(dojo.hitch(this, function(){
                    this.store.fetch({query: {children: value}, onComplete: fx, onError: function(e){d.errback(e)}, scope: this});
                }), 5000);
                return d;
            }
于 2013-11-07T14:59:11.427 に答える