2010-09-04 72 views
2

我正在写一个jQuery网格插件,并且我设计了它,因此它可以独立于所使用的语言工作。以下是我的插件是如何分配的基本知识:在JavaScript函数中使用HtmlHelper是否有正确的方法?

$("#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的)。我不想在Controller的JSON响应中返回HTML,因为这是不必要的开销。

有没有什么好方法可以在飞行中创建这些动作链接?目前,得到它的工作,我有这个令人难以置信的讨厌的方法:

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); 
} 

等各个回调,我只是觉得,并表示要编辑的ID的data更换X

我知道这是不好的将尽快打破控制器或动作中有一个X。那我该如何正确地做到这一点?

+0

我怀疑这是你正在寻找的答案,但你能不能只选择“值X“碰撞实际上不可能?即%#$ PLACEHOLDER $#%之类的? – 2010-09-04 14:10:51

回答

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> </DIV >”围观因为HTML()只抓住 HTML)

+0

我认为你的意思是'href'而不是'id'?这个答案有以下几点:'anchor.attr('href',anchor.attr(“href”)+“/”+ data)'。 – GenericTypeTea 2010-09-04 14:53:46

+0

哦?从您的问题中的代码看来,您只是替换了* id *属性的值。但无论如何,我很高兴能够提供帮助。 :) – 2010-09-04 15:10:17

+0

它是一个ActionLink,所以id是控制器操作中属性的名称,而不是元素的ID。 – GenericTypeTea 2010-09-04 16:01:13

相关问题