0

膨大な量のコードで申し訳ありませんが、徹底したかった..

グリッド 1 にはボタンがあります。コードは次のとおりです。

name: "custom1", text: "View",
click: function(e) {
  $uid = this.dataItem(this.select()).users_id;
  $(".title h4").filter(":first").css({
     color: "#0070c0",
     "text-decoration": "underline",
     cursor: "pointer"
  });
  var offset = $(".grid-box").offset();
  var newLeft = offset.left+25;
  newLeft = newLeft + "px";
  var newTop = offset.top+80;
  newTop = newTop + "px";

  // Get Profile Info
  $.getJSON(
    '/data/get_users_data.php',
    { users_id: $uid })
    .done( function(tempData) {
        $(".echo_users_name").html(tempData.data[0].users_first_name + ' ' + tempData.data[0].users_last_name);
        $("#users_email").html("<a href=\"+tempData.data[0].users_email+\">"+tempData.data[0].users_email+"</a>");
        $("#users_mobile_phone").html(tempData.data[0].users_mobile_phone);


        $('#teamGrid').css("display","none");
        $('.grid-box2').css({
          display: "block",
          position: "absolute",
          top: newTop,
          left: newLeft,
        }); 
        generatePermissionsGrid($uid);
    });
},

このボタンをクリックすると、それを格納するグリッドが非表示になり、div が再表示 (css 表示 = ブロック) され、新しいグリッドが生成されます。上記のクリックが発生した後に生成されるグリッド (グリッド #2) は次のとおりです。

function generatePermissionsGrid(uid) {
    $uid = "";
    $uid = uid;
    $("#permissionsGrid").kendoGrid({
        columns: [
            {   title: "Access to Application?", 
                field: "permissions_users_apps_status", 
                attributes: {
                    style: "text-align: center; font-size: 14px;"
                },
                filterable: true,
                headerAttributes: {
                    style: "font-weight: bold; font-size: 14px; width: 100px;"
                },
                template: function(dataItem) {
                    if ( dataItem.permissions_users_apps_status == 0 ) {
                        return "<input type='checkbox' name='permissions_users_apps_status' id='permissions_users_apps_status' value='1' />"
                    } else if ( dataItem.permissions_users_apps_status == 1 ) {
                        return "<input type='checkbox' name='permissions_users_apps_status' id='permissions_users_apps_status' value='1' checked />"
                    }
                }
            },
            {   title: "Application Name", 
                field: "apps_title", 
                attributes: {
                    style: "text-align: center; font-size: 14px;"
                },
                filterable: true,
                headerAttributes: {
                    style: "font-weight: bold; font-size: 14px; width: 100px;"
                }
            },
            { 
                command: [
                    {   
                        name: "custom3", text: "Update",
                        click: function() {
                        $pid = this.dataItem(this.select()).permissions_users_apps_id;
                        /*var $row = $(this);
                        var enabled = $row.find('#permissions_users_apps_status').attr('checked');*/
                        // Update App Info
                        alert($uid + ' - ' + $pid);
                        $(".k-grid-custom3").off("click");
                        return;
                        $.post(
                            '/data/update_users_permissions.php',
                            { 
                                users_id: $uid,
                                apps_id: $pid 
                            }).done( function(data) {
                                generatePermissionsGrid($uid);
                            });
                        }
                    }/*,
                    {   
                        name: "custom1", text: "Delete",
                        click: function(e) {
                            $pid = this.dataItem(this.select()).permissions_users_apps_id;
                          // Delete Permissions
                          $confirmed = confirm("Are you certain you would like to delete\nremove access to this application from this user?");
                          if ( $confirmed ) {
                              $.post(
                                '/data/delete_users_permissions.php',
                                { 
                                    users_id: uid,
                                    apps_id: $pid
                                })
                                .done( function(data) {
                                    //
                                });
                          }
                        },
                    }*/
                ],
                headerAttributes: {
                    style: "width: 80px;"
                },
                attributes: {
                    style: "text-align: center;"
                },
                title: "&nbsp;"
            }
            ],
        dataSource: {
            transport: {
                read: {
                    url: "/data/get_users_permissions.php?users_id=" + uid
                },
                update: {
                    url: "/data/update_teammate.php",
                    type: "POST"
                },
                destroy: {
                    url: "/data/delete_teammember.php",
                    type: "POST"
                },
                create:  {
                    url: "",
                    type: "POST"    
                }
            },
            schema: {
                data: "data",
                total: function (result) {
                         result = result.data || result;
                         return result.length;
               },
               model: {
                    id: "permissions_users_apps_id"   
               }
            },
            type: "json" 
        },
        pageable: {
                refresh: true,
                pageSize: 5,
                pageSizes: [
                    5,10,20
                ]
            },
        sortable: true,
        filterable: true,
        autoSync: true,
        scrollable: false,
        selectable: "row",
        reorderable: false
    }); // END: teamGrid

} // END: generateGrid function

ここで、この生成されたグリッドを閉じると (css display = none を使用して非表示にし、グリッドを破棄して div コンテンツをクリアしようとしましたが、問題ありませんでした)、上のボタン (最初のボタン) をクリックしてこれを開きます再びグリッド - ボタンが 2 回押されたように起動します。次に、同じボタンを使用してこのグリッドを閉じて再度開くと、3回起動します..など..など.永遠に続きます.

クリックバインディングを「オフ」にしてみました..nada。

誰にも提案はありますか??

もう一度、よろしくお願いします...

4

2 に答える 2

1

だから..問題が見つかりました。

各種コマンドボタンの「.done()」関数では、グリッドを一から作り直していました。これにより、クリック ハンドラーが互いに「スタック」します。

正しい方法は、単純にデータソースの再読み取りを強制することです。

したがって、たとえば、グリッドが「permissionsGrid」という div に配置されていて、この呼び出しを行う前に既にグリッドを生成している場合は、次を使用してデータを再読み込みします (グリッドの更新を引き起こします)。

$("#permissionsGrid").data("kendoGrid").dataSource.read();

それでおしまい。きちんとしていてシンプル - そして魅力のように機能します。

これが他の人に役立つことを願っています! 答えがそこにあることは知っていますが、これは単純で簡単な方法のように見え、簡単に複製できました.

楽しみ...

于 2013-07-10T23:24:00.983 に答える
0

剣道ボタンの複数回のクリックを避けるために、最初にクリックしたときにプログレスバーを作成します

  var divTest=  $("#permissionsGrid");
  kendo.ui.progress(divTest,true);

ajax 呼び出しでは、complete() メソッドがプログレス バーを無効にし、グリッド データソースも読み取ります。

  kendo.ui.progress(divTest, false);
  $("#permissionsGrid").data("kendoGrid").dataSource.read();
于 2014-05-19T09:01:35.503 に答える