Hopefully someone has a simpler solution to this but in case anyone else is looking for a workaround, or a starting point to keep working from, here's what I have thus far (using a mix of jquery and dojo):
var iBookmarkXDiff;
var iBookmarkYDiff;
var bookmarksAll = new esri.dijit.Bookmarks({
map: map,
bookmarks: bookmarkList_All
}, dojo.byId('BookmarkID'));
$(".esriBookmarkLabel").click(function () {
var bookmarkName = $(this).html();
for (var i = 0; i < bookmarkList_All.length; i++) {
var iBookmark = bookmarkList_All;
if (bookmarkName == iBookmark["name"]) {
//set global values that will be used in fitBookmark function
iBookmarkXDiff = iBookmark["extent"].xmax - iBookmark["extent"].xmin;
iBookmarkYDiff = iBookmark["extent"].ymax - iBookmark["extent"].ymin;
}
}
});
dojo.connect(bookmarksAll, "onClick", function myfunction() {
// connect fit handler to execute when the map update is finished
fitHandler = dojo.connect(map, "onUpdateEnd", fitBookmark);
});
function fitBookmark() {
dojo.disconnect(fitHandler);
var cMapLevel = map.getLevel();
var cExtent = map.extent;
var cMapXDiff = cExtent.xmax - cExtent.xmin;
var cMapYDiff = cExtent.ymax - cExtent.ymin;
if (cMapXDiff < iBookmarkXDiff || cMapYDiff < iBookmarkYDiff) {
map.setLevel(cMapLevel - 1);
}
}