Backbonejs在这里总是新手,而且总体上是一个以这种方式开发应用程序的新手。我有一个视图,用一些jQuery代码呈现HTML,允许复制一组字段。
$(document).on('click', '.btn-add', function(e){
e.preventDefault();
var controlForm = $('.controls form:first'),
currentEntry = $(this).parents('.entry:first'),
newEntry = $(currentEntry.clone()).appendTo(controlForm);
// Reset the entries to the newly added field.
newEntry.find('#title').val('');
newEntry.find('#section').val('');
newEntry.find('#active').prop('checked',false);
controlForm.find('.entry:not(:last) .btn-add')
.removeClass('btn-add').addClass('btn-remove')
.removeClass('btn-success').addClass('btn-danger')
.html('<span class="glyphicon glyphicon-minus">-</span>');
}).on('click', '.btn-remove', function(e){
$(this).parents('.entry:first').remove();
e.preventDefault();
return false;
});
我有一些其他jQuery迭代JSON对象(在视图中加载到js变量中) - 并触发&#34;点击&#34; event并将值分配给表单元素。
var d = '<%= sections %>';
if (d) {
var cnt = 0;
$.each($.parseJSON(d), function() {
if (cnt >=1) {
$('.btn-add').trigger('click');
}
cnt++;
});
var t = $.parseJSON(d);
cnt = 0;
$('#sections *').filter(':input').each(function(){
if (this.name) {
if (this.type == "checkbox") {
if (t[cnt][this.name]) {
$(this).prop('checked', true);
} else {
$(this).prop('checked', false);
}
} else {
$(this).val(t[cnt][this.name]);
}
} else {
// button element has no name, so this is the end of this set of fields.
// increment counter here
cnt++
}
});
}
在第一次加载时,一切都很好用。或者重新加载&#34;。但是当我浏览Backbonejs应用程序时 - 视图完全失败。这是它在新负载上的表现:
第二次加载(注意+符号消失了,还有一个额外的字段集)。
一件有趣的事情;当&#34; +&#34;单击,它应该只复制一次字段集。但是在导航应用程序之后 - 它将被复制多次(取决于我点击其他链接多少次,然后返回到&#34;部分&#34;链接)。我的直觉是整个视图正在重新创建,并且侦听器正在为每次重新加载进行复制。这是对的,如果是的话 - 我该如何防止这种情况发生?
谢谢大家!