2012-02-25 3 views
3

jqgridでMVC 4 + EF 4.1を使用しています。 私はHTML & Javascriptで新しく、私はjqgrid内でカスタム編集jqueryダイアログを開くことなく成功しようとしています。あなたが望むふるまいを実装するより良い方法があれば、歓迎します。jqgrid + MVC:jqgridの中でダイアログを開くには?どのメソッドを使ってダイアログを開くことをお勧めしますか?

私ははすでに他の目的のために正常に動作しますクラス=「openDialog」に取り付けられており、以下のjqueryのダイアログスクリプトを持っている:

$.ajaxSetup({ cache: false }); 

$(document).ready(function() { 
    $(".openDialog").live("click", function (e) { 
     e.preventDefault(); 

     $("<div></div>") 
      .addClass("dialog") 
      .attr("id", $(this).attr("data-dialog-id")) 
      .appendTo("body") 
      .dialog({ 
       height: $(this).attr("data-dialog-alt"), 
       width: $(this).attr("data-dialog-larg"), 
       autoResize: $(this).attr("data-dialog-autosize"), 
       position: 'top', 
       title: $(this).attr("data-dialog-title"), 
       close: function() { $(this).remove() }, 
       modal: true, 
       buttons: { "Ok": function() { $(this).dialog("close"); } } 
      }) 
      .load(this.href); 
    }); 

    $(".close").live("click", function (e) { 
     e.preventDefault(); 
     $(this).closest(".dialog").dialog("close"); 
    }); 
}); 

これは私がやろうとしているものです。これはダブルクリックイベントのテストに過ぎません。動作すれば、コードを特定のボタンの中に入れます。

をjqgrid

.......... 
    { name: 'act', index: 'act', width: 75, sortable: false, search: false } 
     ], 
     ondblClickRow: function (id) { 
      if (id != null) { 
       // here I would like to launch the open dialog with a similar code: 
       // "<a class='openDialog' data-dialog-id='myEditDlg' data-dialog-autosize='false' data-dialog-alt='580' data-dialog-larg='740' data-dialog-title='test dialog' href='/mycontroller/EditDlg/myid'>test</a>" 
      } 
     }, 
     pager: '#jqpager', 
     .... 

詳細基本的に

、今私は私がを必要とする各ボタン/アクションのためボタンスタイルのアンカーを置くカスタムフォーマッタを使用しています。例えば:

  ..... 
     gridComplete: function() { 
      applyZebra("mygrid"); 
      var ids = grid.jqGrid('getDataIDs'); 
      var rows = grid.jqGrid('getRowData'); 
      for (var i = 0; i < ids.length; i++) { 

       var row = rows[i]; 
       var t = row['myrow']; 
       var cl = ids[i]; 

       tst = '<a class="mybuttonclass openDialog" data-dialog-id="tckDetDlg" data-dialog-autosize="false" data-dialog-alt="580" data-dialog-larg="740" data-dialog-title="test dialog" href="/mycontrolller/testDlg/' + t + '"></a>'; 

       $("#jqTicketgrid").jqGrid('setRowData', ids[i], { act: tst }); 
      } 
     }, 
     ..... 

どこボタンのようなアンカーmybuttonclassスタイル...

はあなたの助けをありがとうございました! よろしくお願いします。

+0

THX again Oleg。申し訳ありません、私は間違っていました。 **私はカスタムフォーマッタを使用していません**前に**使用していましたが、今は 'gridcomplete'の中でそのコードを使用しています。属性については、ソリューション全体に同じopendialog関数を使用しているので Pheraps私は間違ったことをしました...私を明確にしてください:なぜ私は ''のライブバインディングをしていると言いますか?私にとっては、バインディングはすでに '$ THX! – Larry

+1

私はちょうど私の答えの一部を「UPDATED」と掲載しました。 "生きている"ことについての質問:それには多くの制限があり、いつもゆっくりと '束縛 'されますが、それはあなたがページ上にまだ存在していない要素に「バインド」します。前のコメントの意味は、ほとんどの場合、 ''要素の 'data-'属性にいくつかのパラメータを置き、それをイベントハンドルから取得することです。その代わりに、 'onclick'属性を定義して、何らかの関数を任意のパラメータで呼び出すことができます。たとえば、 'onclick =" myFunc(580,740、 '/ mycontrolller/testDlg/BlaBla'); falseを返します。 – Oleg

答えて

関連する問題