这是我的代码:
if ($(this.el).find('.select-picture').is(':checked')) {
var source = $(this).parent().prev().attr('src');
document.cookie = "imagePath=" + source;
var myCookie = document.cookie.replace(/(?:(?:^|.*;\s*)imagePath\s*\=\s*([^;]*).*$)|^.*$/, "$1");
console.log(myCookie);
}
我有一个类.select-picture,我正在寻找它的父亲的前一个元素,我想对它执行一个动作(将图像路径保存到cookie)。代码在html文档中的标记之间很好地工作,但是当它放在Backbone的视图中时,控制台返回“undefined”。
我几乎可以肯定这是因为Backbone中的“this”不是以前的“this”,但我不知道如何更改它以使其正常工作。
有人能帮助我吗?
编辑 - 这是HTML:
<div class="img-holder">
<img src="images/picture.jpg" class="img-responsive top-img choose-img"/>
<form>
<input type="radio" name="vehicle" value="Bike" class="select-picture">
</form>
</div>
<div class="img-holder">
<img src="images/picture2.jpg" class="img-responsive choose-img"/>
<form>
<input type="radio" name="vehicle" value="Bike" class="select-picture">
</form>
</div>
答案 0 :(得分:2)
了解javascript中的范围和上下文非常重要。 我想你的模板是这样的:
<script id="template_id" type="text/template">
<div>
<% _.each(images, function(image){ %>
<div class="row">
<img src="<%= image.src %>" />
<div class="form-group">
<input class="select-picture" name="image[<%= image.uid %>]['is_checked']" type="checkbox" />
<input name="image[<%= image.uid %>]['quantity']" type="text" />
</div>
<div>
<% }); %>
</div>
</script>
在Backbone View中你可以做类似的事情:
Backbone.View.extend({
el : $('#template_id'),
function onChecked(){
/*
* this.$el refer to #template_id element.
*/
this.$el.find('.select-picture:checked').each(function(index){
/*
* Now this referer to the current context.
*/
var source = $(this).parent().prev().attr('src');
document.cookie = "imagePath=" + source;
var myCookie = document.cookie.replace(/(?:(?:^|.*;\s*)imagePath\s*\=\s*([^;]*).*$)|^.*$/, "$1");
console.log(myCookie);
})
},
});
看看:
答案 1 :(得分:1)
这个在这里查看(可能是)视图对象,而不是元素
如果它属于视图模板
if ($(this.el).find('.select-picture').is(':checked')) {
var source = this.$('.select-picture').parent().prev().attr('src');
document.cookie = "imagePath=" + source;
var myCookie = document.cookie.replace(/(?:(?:^|.*;\s*)imagePath\s*\=\s*([^;]*).*$)|^.*$/, "$1");
console.log(myCookie);
}