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
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
Nasıl düğüm değiştirmek için.'in ...
Neden Diziler farklı türleri için iki ...
yapılandırma düğüm statik bower_compon...
Değiştirmek için bir öğe's class ...
Nasıl gıt tamamlama belirtilen değişti...