2010-09-04 2 views
2

Я пишу плагин сетки jQuery, и я разработал его так, чтобы он работал независимо от используемого языка. Ниже основы того, как назначен мой плагин:Есть ли правильный способ использования HtmlHelper в функции JavaScript?

$("#grid").grid({ 
    enablePager: true, 
    dataPath: "Movement/GetGridPage", 
    columns: { 
     Edit: { title: "", cellCallback: editButtonCallBack, width:"16px" }, 
     DocketNumber: { title: "Docket #" }, 
     SiteName: { title: "Site" }, 
     SiteAddress: { title: "Address" }, 
     SiteRegion: { title: "Region" }, 
    }, 
    cssTable: "table", 
    cssAltRow: "altRow" 
}); 

Потому что я хочу, чтобы выполнить некоторые более продвинутые обработки данных, чем просто заполнение <td> с текстом, я добавил обработчик обратного вызова (cellCallback), который позволяет у меня есть функция, специфичная для страницы для данных конкретных столбцов. Так что в моем плагине я сделать следующее:

var dataItem = currentRow[columnName]; 
if (columnSetting.cellCallback) { 
    $td.html(columnSetting.cellCallback(dataItem)); 
} 
else { 
    $td.html(dataItem); 
} 

Проблема у меня в том, что мой редактировать столбец должен содержать некоторые ImageActionLink с (моя реализация Образ ActionLink). Я не хочу возвращать HTML в свой ответ JSON от Контроллера, потому что это лишние накладные расходы.

Есть ли какой-либо хороший способ, я могу создать эти действия ссылки на лету? В настоящее время, чтобы она работала, у меня есть эта невероятно неприятный метод:

function editButtonCallBack(data) 
{ 
    var link = '<%= Html.ImageActionLink("Movement", "Edit", new { id = "X" }, 
     Url.Content("~/Content/Icons/Edit.png"), "Edit", null, null) %>'; 
    return link.replace("X", data); 
} 

Так что на каждом обратном вызове, я просто найти и заменить X с data, который представляет идентификатор для редактирования.

Я знаю, что это плохо и сломается как только контроллер или действие имеет X в нем. Итак, как я могу это сделать правильно?

+0

Я сомневаюсь, что это ответ, который вы ищете, но вы не могли бы просто выбрать значение " X ", для которых столкновения практически невозможны? т. е.% # $ PLACEHOLDER $ #% или тому подобное? –

ответ

1

насчет:

function editButtonCallBack(data) 
{ 
    var link = '<%= Html.ImageActionLink("Movement", "Edit", null, 
     Url.Content("~/Content/Icons/Edit.png"), "Edit", null, null) %>'; 

    var element = $('<div>' + link + '</div>'); 
    element.find('a').attr('id', data) 
    return element.html(); 
} 

Это будет по крайней мере, выполнить замену по этому конкретному атрибуту, а не на весь блок HTML. (Окружающие с «<DIV> </дел >», потому что HTML() только захватывает внутреннюю HTML.)

+0

Полагаю, вы имели в виду 'href' вместо' id'? Поблагодарили за это ответ: 'anchor.attr ('href', anchor.attr (" href ") +"/"+ data)'. – GenericTypeTea

+0

О? Из вашего кода в вашем вопросе было похоже, что вы только заменили значение атрибута * id *. Но в любом случае, рад, что я мог бы помочь. :) –

+0

Это ActionLink, поэтому id - это имя свойства в действии контроллера, а не идентификатор элемента. – GenericTypeTea

Смежные вопросы