سؤال

أحتاج إلى تحميل بعض HTML الديناميكي عندما ينقر المستخدم على رابط في JQGrid.

ها هو تعريفي

function loadUserAdministrationList() {
    jQuery("#userlist").jqGrid({
        url: '/Administration/GetData/',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['Username', 'Prénom', 'Nom', 'Courriel'],
        colModel: [{ name: 'Username', index: 'Username', width: 300, align: 'left',
                     edittype: 'select', formatter: 'showlink',
                     formatoptions: { baseLinkUrl: '/Administration/ModifyUser'} },
              { name: 'Prénom', index: 'Firstname', width: 300, align: 'left' },
              { name: 'Nom', index: 'Lastname', width: 300, align: 'left' },
              { name: 'Courriel', index: 'Email', width: 300, align: 'left'}],
        pager: jQuery('#userlistpager'),
        rowNum: 20,
        rowList: [5, 10, 20, 50],
        sortname: 'Firstname',
        sortorder: "asc",
        height:600,
        viewrecords: true,
        imgpath: '/Public/css/theme/custom/images',
        caption: '',
        loadtext: 'Chargement des utilisateurs...'
    }).navGrid('#userlistpager',
                { search: true, edit: false, add: false, del: false },
                {}, // default settings for edit
                {}, // default settings for add
                {}, // default settings for delete
                { closeOnEscape: true, multipleSearch: true,
                  closeAfterSearch: true }, //search options
                {}
    );
};

كما ترون ، أود تحميل نموذج التعديل. كيف يمكنني أن أخبر JQGrid إجراء مكالمة Ajax على نقرة ShowLink؟ شكرًا

هل كانت مفيدة؟

المحلول

يمكن أن يبدو الحل المحتمل أن يتبع:

  1. في "اسم المستخدم" ، تقوم بإزالة غير ضروري edittype: 'select' و align: 'left' والنظر في إضافة title: false بدلاً من ذلك ، لإزالة عرض تلميح الأدوات على خلية مع الماوس.
  2. تعديل formatoptions والتي تحتوي على formatter: 'showlink' لاتباع: formatoptions: { baseLinkUrl: 'javascript:', showAction: "MyBase.GetAndShowUserData(jQuery('#userlist'),'#myDiv','", addParam: "');" }. سوف JQGrid بناء href سمة <a> عنصر مثل التالي: href="javascript:MyBase.GetAndShowUserData(jQuery('#userlist'),'#userDetails','?id=rowId');" أين rowId سيكون معرف صف الشبكة المقابل.
  3. أضف عالمي وظيفة (محددة على المستوى العلوي من JavaScript) على سبيل المثال مع الاسم MyBase.GetAndShowUserData مثل ما يلي:

(في الكود أدناه نستخدم Global MyBase فقط لتسلق الأسماء)

var MyBase = {};
MyBase.GetAndShowUserData = function (grid,tagetDivSelector,param) {
    // param will be in the form '?id=rowId'. We need to get rowId
    var ar = param.split('=');
    if (grid.length > 0 && ar.length === 2 && ar[0] === '?id') {
        var rowid = ar[1];
        var username = grid.getCell(rowid, 'Username');
        var userDetails = jQuery(tagetDivSelector);
        userDetails.empty();
        jQuery.ajax({
            url: '/Administration/ModifyUser',
            data: { userId: rowid, userName: username },
            type: 'GET',
            // optional contentType (depend on your server environment):
            // contentType: 'application/json',
            dataType: 'json',
            success:function(data,st) {
                var s = "BlaBla";
                // TODO: construct HTML code based on data received from the server
                userDetails.html(s);
            },
            error:function(xhr,st,err){
                alert(st + ": " + data.responseText);
            }
        });
    }
};

أفترض هنا ، أن هناك على صفحتك <div> أو أي عنصر آخر مع id="userDetails" مثل

<table id="userlist"></table>
<div id="pager"></div>
<div id="userDetails"></div>

والوظيفة MyBase.GetAndShowUserData سيقوم بإجراء مكالمة Ajax وملء النتائج داخل <div id="userDetails"></div>. الرمز داخل MyBase.GetAndShowUserData هو قالب خام فقط. أردت فقط إظهار كيف يمكنك الوصول إلى البيانات من الشبكة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top