我正在编写一个基于Django和Bootstrap的应用程序,它将媒体文件显示为缩略图,以及描述和标签。我希望这些标签可以设置为常规的Bootstrap标签,并且可以点击。
我正在使用X-editable单独编辑内联的说明和标记(通过Select2)并将其发送回服务器。除了标签之外,这很有效。我无法做到:
步骤3(向服务器发送干净的数据)是我可能想到的或可能是另一个问题的主题。
这个fiddle应该说明我正在尝试做的事情和结果:请注意,当单击编辑按钮时,窗口小部件会加载带有不需要的标记的数据。
<div class="controls controls-row">
<span class="tags" id="tags-editable-1" data-toggle="manual" data-type="select2" data-pk="1" data-original-title="Enter tags">
<a href="#"><span class="label">apples</span></a>
<a href="#"><span class="label">oranges</span></a>
<a href="#"><span class="label">pie</span></a>
</span>
<a href="#" id="tags-edit-1" data-editable="tags-editable-1" class=""><i class="icon-pencil"></i></a>
</div>
$('.tags').editable({
placement: 'right',
select2: {
tags: ['cake', 'cookies'],
tokenSeparators: [",", " "]
},
});
$('[id^="tags-edit-"]').click(function(e) {
e.stopPropagation();
e.preventDefault();
$('#' + $(this).data('editable') ).editable('toggle');
});
所以实际的问题是步骤2和4:如何剥离发送到x-editable小部件的标记并将其重新添加到它返回的结果中?
答案 0 :(得分:6)
我经过一些实验后发现,虽然解决方案不是100%完美。
data-value
属性,如data-value="apples, oranges, pie"
display: function(value) {
$.each(value,function(i){
// value[i] needs to have its HTML stripped, as every time it's read, it contains
// the HTML markup. If we don't strip it first, markup will recursively be added
// every time we open the edit widget and submit new values.
value[i] = "<span class='label'>" + $('<p>' + value[i] + '</p>').text() + "</span>";
});
$(this).html(value.join(" "));
shown
回调。
$('.tags').on('shown', function() {
var editable = $(this).data('editable');
value = editable.value
$.each(value,function(i){
value[i] = $('<p>' + value[i] + '</p>').text()
});
});
此fiddle显示代码和工作示例。