我的$ el不工作?

时间:2013-03-26 09:52:36

标签: javascript templates backbone.js underscore.js

我正在尝试学习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获取元素并附加模板,如您所见。这是有效的,但这是一个黑客,我不喜欢它。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

我认为你在这一行中做错了

var $that = $(this);

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

var that = this;

然后this.el将不会被定义。请检查此working example

this.el与此之间的区别。$ el

基本上$ el是$(this.el)的缓存jquery对象。阅读更多Backbone View Documentation

答案 1 :(得分:0)

我认为favs是一个类或一个id。如果它是一个类,请尝试添加.;如果是#,请在favs之前添加el: '.favs',,例如{{1}}。它是jquery选择器语法。