【发布时间】:2018-03-18 11:54:22
【问题描述】:
我有一个这样的 javascript 函数,它与 Select2 一起使用。
function formatResult(item) {
var markup = '<div class="card">\
<div class="card-header">\
<div class="avatar">\
<img src="http://mysite/profile/' + item.Username + '_thumb.jpg"/>\
</div>\
<div class="name">' + item.FirstName + ' ' + item.LastName + '</div>\
<div class="title">' + item.Title + '</div>\
</div>\
</div>';
return markup;
}
它可以工作,虽然将 HTML 制作成字符串时会很乏味。
我想做的是把它变成一个局部,以便于维护和编辑。
理想情况下,我想要这样的东西。
function formatResult_User(item) {
var markup = '@Html.Raw(Html.Partial("_UserCardTemplate").ToString().Replace(Environment.NewLine, ""))';
return markup;
}
但是我怎样才能重新插入item 变量呢?我是否只需放置一个占位符值并在markup 变量上使用replace(),例如markup = markup.replace('item.Title', item.Title)?有没有更好的办法?
【问题讨论】:
-
你必须使用占位符。
-
另一种选择是在部分中只包含
<div class="title"></div>,并且在将 html 添加到 DOM 后,使用$(element).find('.title').text(item.title);(并且实际上没有必要创建单独的部分 - 你可以创建一个(隐藏的)模板并克隆它) -
@StephenMuecke HTML 在函数中。
-
是的,我知道。但我假设您必须将该 html 添加到 DOM,所以我的意思是在视图中
<div id="template" style="display:none;><div class="card">....</div></div>然后var clone = $('#template').html().clone(); // add to DOM, then clone.find('.title').text(item.title);在您的函数中
标签: javascript c# html asp.net-mvc razor