0

我正在尝试学习 Backbone,并且我有一些运行良好的视图。这是我有问题的观点的代码:

var FavoritesView = Backbone.View.extend({
        el: 'favs',
        render: function() {
            var timesheets = new TimeSheet();
            var $that = $(this);
            timesheets.fetch({
                data: { favorite: true},
                success: function(model, response, options) {
                    var template = _.template($('#favs-view').html(), { timesheets: model.models})
                    $('.favs').html(template).addClass('well');
                }
            });
        }
      });

您可以看到我获取了一个集合,将响应放入模板中,然后显示它。我无法从我的“成功”回调中获取 $el。$that.el 和 $that.$el (我不知道有什么区别)都是未定义的。如您所见,我最终不得不使用 Jquery 来获取元素并附加模板。这是有效的,但这是一个黑客,我不喜欢它。任何帮助都会很棒。

4

2 回答 2

1

我认为你在这条线上做错了

var $that = $(this);

el 是这个对象的属性,而不是$(this)的属性。所以你应该这样做

var that = this;

那么 this.el 不会是未定义的。检查这个工作示例

this.el 和 this.$el 的区别

基本上 $el 是 $(this.el) 的缓存 jquery 对象。在主干视图文档中阅读更多信息

于 2013-03-26T10:01:21.370 回答
0

我认为它favs是一个类或一个ID。尝试添加一个.如果它是一个类或一个#如果它是一个 id,就在 之前favs,比如el: '.favs',. 这是 jquery 选择器语法。

于 2013-03-26T09:59:08.163 回答