SORU
30 Aralık 2010, PERŞEMBE


Yapılandırma sağ tıklayın, farklı düğüm türleri için jstree değiştirmek için

Bir örnek jstree sağ-tıklama bağlam menüsü (yanındaki eklenti kullanarak) görünümünü özelleştirmek için nasıl online gösteren bir yerlerde görmüştüm.

Örneğin, benim kullanıcıları silmek için izin ver "belge" için değil, "klasörler" ("sil" klasörler için bağlam menüsünden seçeneği). gizleyerek

Şimdi örnek bulamadım. Herkes doğru yönde bana gelin miyim? 26* *resmi gerçekten yardımcı olmadı.

Düzenleme:

Sadece bir veya iki küçük değişikliklerle varsayılan bağlam menüsü istiyorum beri, bütün menü (tabii ki eğer tek yolu buysa rağmen) yeniden yaratmak istemem. Yapmak istediğim şey ise şudur:

"contextmenu" : {
    items: {
        "ccp" : false,
        "create" : {
            // The item label
            "label" : "Create",
            // The function to execute upon a click
            "action": function (obj) { this.create(obj); },
            "_disabled": function (obj) { 
                alert("obj="   obj); 
                return "default" != obj.attr('rel'); 
            }
        }
    }
}

ama işe yaramazsa, o madde her zaman devre dışıdır sadece yaratmak (uyarı asla görünür).

CEVAP
5 Ocak 2011, ÇARŞAMBA


contextmenu eklenti zaten bu desteği vardır. Belgelerine bağlı:

Bir nesne Bekliyor ya . items: ^strong>bir nesne döndürmesi gereken bir fonksiyon. Eğer bir işlevi kullanılır ağacın bağlamda ve bir argüman sağ tıklandığında düğüm ateş alır.

Yani contextmenu ile çalışmak için kodlanmış bir nesne vermek yerine, aşağıdaki işlevi sağlayabilir. Adında bir sınıf için tıkladım bu elemanı kontrol eder "" ve kaldırır "" nesne onu silerek menü: . klasörü sil

function customMenu(node) {
    // The default set of all items
    var items = {
        renameItem: { // The "rename" menu item
            label: "Rename",
            action: function () {...}
        },
        deleteItem: { // The "delete" menu item
            label: "Delete",
            action: function () {...}
        }
    };

    if ($(node).hasClass("folder")) {
        // Delete the "delete" menu item
        delete items.deleteItem;
    }

    return items;
}

Yukarıdaki sil seçeneği tamamen, ama eklenti de onun davranışı devre dışı bırakma yaparken bir öğeyi göstermek için izin verir, ilgili madde için _disabled: true ekleyerek gizlemek unutmayın. Bu durumda if deyimi içinde items.deleteItem._disabled = true yerine kullanabilirsiniz.

Açık olmalı, ama daha önce ne vardı yerine customMenu işlevi: eklenti yeniden unutmayın

$("#tree").jstree({plugins: ["contextmenu"], contextmenu: {items: customMenu}});
//                                                                    ^
// ___________________________________________________________________|

Düzenleme:Eğer menüyü sağ tıklatın her yeniden istemesen bile, sil menü öğesini kendisi için eylem işleyici mantığı koyabilirsiniz.

"label": "Delete",
"action": function (obj) {
    if ($(this._get_node(obj)).hasClass("folder") return; // cancel action
}

Yeniden düzenleme:Sonra bakıyor jsTree kaynak kodu, görünüşe göre değiştirmek üzere, yeniden her zaman olduğu gösterilen her neyse (bkz: show() parse() fonksiyonları), bu yüzden ben bir sorun görmüyor benim ilk çözüm.

Ancak, _disabled değeri olarak bir fonksiyon ile söylüyorsunuz gösterim severim. Bir potansiyel yolu keşfetmek için sargı parse() fonksiyonu ile kendi veren işlev disabled: function () {...} ve depolar sonucu _disabled, çağırmadan önce orijinal parse().

Ya da doğrudan kaynak kodunu değiştirmek için hiç de zor olmayacak. Sürüm hattı 2867 1.0-rc1 ilgili bir

str  = "<li class='"   (val._class || "")   (val._disabled ? " jstree-contextmenu-disabled " : "")   "'><ins ";

Sadece, val._disabled = val._disabled() eğer $.isFunction(val._disabled) ve denetleyen bundan önce bir çizgi ekleyebilirsiniz. Sonra bir yama:) yaratıcıları için gönderin

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • colacas

    colacas

    29 EKİM 2006
  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • Muse

    Muse

    28 EYLÜL 2006