2013-03-26 4 views
0

Я пытаюсь узнать Магистраль, и у меня есть несколько видов, которые работают отлично. Вот код, с моей точки зрения проблемного:

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 и $, которые. $ el (я не знаю разницы), не определены. Я должен был в конечном итоге использовать JQuery, чтобы получить элемент и прикрепить шаблон, как вы видите. Это работает, но это хак, и мне это не нравится. Любая помощь будет большой.

ответ

0

Я принимаю это favs - это класс или идентификатор. Попробуйте добавить ., если это класс или #, если это идентификатор, перед favs, например el: '.favs',. Это синтаксис селектора jquery.

1

Я думаю, что вы делаете неправильно в этой строке

var $that = $(this); 

эль является собственностью этого объекта не $ (это). Таким образом, вы должны просто сделать

var that = this; 

Тогда this.el не будет неопределенным. Проверьте working example

Разница между this.el и это. $ Эль ​​

В основном $ эль кэшируется JQuery объект $ (this.el). Подробнее на Backbone View Documentation

+0

'$ (это)' просто обернуто 'this' object – thinklinux

+1

@thinklinux Проверьте это http://jsbin.com/akovun/2/edit – sachinjain024

+0

О, вы правы. виноват! и ему нужно будет поменять 'favs' на' .favs' – thinklinux