jQuery内部的Volt模板引擎

帕特里克·曼瑟(Patrick Manser)

我有一个(也许)非常独特的问题。您可以查看下面的图片以获得更好的理解。

选择区域中的设备零件在控制器中获取,然后用伏特循环遍历它们,并在<option>标签中回显它们,如下面的代码所示:

<select class="form-control">
    <option value="0">No equipment</option>
    {% for item in equipment %}
    <option value="{{ item.id }}">{{ item.name }}</option>
    {% endfor %}
</select>

用户可以按加号按钮添加其他设备。整个<tr>副本通过jQuery克隆并附加。问题是,当我想遍历设备零件时。伏特代码不会被解析,而是由jQuery显式回显,如下图所示。

克隆代码是这样的(虽然很hacky,但我不知道有更好的替代方法):

$('#addEquipment').bind('click', function() {
    var $div = $('tr[id^="rowEquipment"]:last');
    var num = parseInt($div.prop('id').match(/\d+/g), 10) + 1;
    var $clone = $div.clone().prop('id', 'rowEquipment' + num);
    var $equipment = '<td>'+
        '<div class="row">'+
            '<div class="col-sm-1">'+
                '<p class="form-control-static">Equipment:</p>'+
            '</div>'+
            '<div class="col-sm-3">'+
                '<select class="form-control">'+
                    '<option value="0">No equipment</option>'+
                    '{% for item in equipment %}'+
                    '<option value="{{ item.id }}">{{ item.name }}</option>'+
                    '{% endfor %}'+
                '</select>'+
            '</div>'+
            '<div class="col-sm-1">'+
                '<p class="form-control-static">Notes:</p>'+
            '</div>'+
            '<div class="col-sm-3">'+
                '<input type="text" class="form-control" placeholder="Thickness mm / Weight kg">'+
            '</div>'+
            '<div class="col-sm-4">'+
                '<button id="' + num + '" class="btn btn-default removeEquipment"><span class="glyphicon glyphicon-remove"></span></button>'+
            '</div>'+
        '</div>'+
    '</td>';
    $div.after($clone.html($equipment));
    $('.removeEquiment').bind('click', function(evt) {
        var $id = $(evt.target).prop('id');
        var $removeEquipment = $('tr[id^="rowEquipment' + $id + '"]');
        $removeEquipment.remove();
    });
});

这是图片:

在此处输入图片说明

感谢您的任何建议!

编辑:

yergo的第一个解决方案(谢谢您)产生了一个SyntaxError: invalid property id,可能是因为{% for item in equipment %}现在将其视为JavaScript而不是字符串。

第二种解决方案是这样完成的:

var div = $('tr[id="cloneEquipment"]')[0];
var clone = div.cloneNode();
clone.parentNode.insertBefore(clone, div);

结果是 TypeError: clone.parentNode is null

也许要提一下(抱歉,我忘了):jQuery代码在单独的.js文件中

编辑2

我犯了一个错误:我试图将其附加到克隆节点的parentNode上,这显然是伪造的。现在,我到此为止:

基于yergo的第二个解决方案,我在JSFiddle中进行了一些try&error。现在,我的解决方案如下所示:

var div = $('tr[id^="cloneEquipment"]');
var clone = div.clone();
clone.removeClass('hidden');
var cloneNode = clone[0].cloneNode();
div[0].parentNode.insertBefore(cloneNode, div[0]);

克隆过程似乎有效,但是它仅克隆<tr>而不是其中的内容。

帕特里克·曼瑟(Patrick Manser)

经过大量的试验和错误,我来到了下面的工作代码。所有clone.find()命令都可以忽略。一直以来,这都是一个纯jQuery的问题,与Volt或Phalcon无关。这样,可以正确解析电压代码:

$('#addEquipment').bind('click', function() {
    var div = $('tr[id^="rowEquipment"]:last');
    var num = parseInt(div.prop('id').match(/\d+/g), 10) + 1;
    var clone = div.clone();
    clone.prop('id', 'rowEquipment' + num);
    clone.find('.addEquipment').tooltip('disable');
    clone.find('.addEquipment').remove();
    clone.find('.helpEquipment').remove();
    clone.find('.removeEquipment').prop('id', num);
    clone.find('.removeEquipment').removeClass('hidden');
    $(div).after(clone);
    $('.removeEquipment').bind('click', function(evt) {
        var $id = $(evt.target).prop('id');
        var $removeEquipment = $('tr[id^="rowEquipment' + $id + '"]');
        $removeEquipment.remove();
    });
});

这是针对那些感兴趣的人的JSFiddle:clickerino

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery内部的Volt模板引擎

来自分类Dev

Phalcon的Volt引擎的自动转义设置?

来自分类Dev

Node.js和Swig模板引擎-包括模板内部的模板

来自分类Dev

在我自己的js模板系统/引擎中使用jquery选择

来自分类Dev

Laravel 5的刀片模板引擎中未呈现内部资产函数的变量

来自分类Dev

WebStorm速度模板引擎

来自分类Dev

mootools javascript模板引擎

来自分类Dev

模板引擎禁用PHP

来自分类Dev

模板引擎禁用PHP

来自分类Dev

模板引擎重构

来自分类Dev

与模板引擎反应

来自分类Dev

如何在volt模板中动态引用模板文件?

来自分类Dev

如何使用Express.js在内部链接到另一个HTML模板引擎页面?

来自分类Dev

如何将事件绑定到由模板/数据绑定引擎生成的html(无Jquery)

来自分类Dev

将默认模板更改为“ common.volt”?

来自分类Dev

Phalcon PHP NativeArray使用Volt模板访问多维数组

来自分类Dev

Phalcon / Volt 动态构建/渲染公共模板区域(部分)

来自分类Dev

保留元素的JS模板引擎

来自分类Dev

WordPress主题开发-模板引擎

来自分类Dev

Django模板引擎的错误检查?

来自分类Dev

前端和后端模板引擎

来自分类Dev

Razor 引擎:在 & 的模板中生成 &

来自分类Dev

jQuery验证引擎

来自分类Dev

jQuery验证引擎逻辑或

来自分类Dev

在Intellij IDEA中支持Pug模板引擎

来自分类Dev

使用输出缓冲作为模板引擎

来自分类Dev

JavaScript上的简单模板引擎

来自分类Dev

直接从Revel模板引擎提取模型

来自分类Dev

在JADE模板引擎上解析数组