2013-10-09 3 views
0

Я следую за backbone.js tutorial, и часть кода не работает, возможно, потому что Backbone изменился тем временем или потому, что я делаю что-то неправильно. Это функция рендеринга моего представления.

// grab and populate our main template 
render: function() { 
    // once again this is using ICanHaz.js, but you can use whatever 
    this.el = ich.app(this.model.toJSON()); 

    // store a reference to our movie list 
    this.movieList = this.$('#movieList'); 

    return this; 
}, 

Элемент добавляется в документ позже в коде. Впоследствии, когда код пытается добавить элементы в this.movieList, Javascript говорит, что он не определен.

Я попытался изменить this.el = ... к

this.setElement(ich.app(this.model.toJSON())); 

, и это помогает, потому что this.$el теперь определено, но если я попробовать this.$el.find(...) он никогда не находит ничего, даже если через проверки в Chrome это, по всей видимости содержит HTML-элементы ,

+0

Похоже, для использования ich.app у вас должен быть элемент шаблона сценария с id "app", доступным в DOM. убедитесь, что 'console.log ($ ('# app'))' и 'console.log (ich.app (this.model.toJSON()))' разрешает. Это может дать больше информации о том, что происходит –

ответ

1

Я никогда не использовал ICanHaz, но он работает, как и другие языки шаблонов, вероятно, возвращает HTML-код. В этом случае я хотел бы сделать что-то вроде:

render: function(){ 
    this.$el.html(ich.app(this.model.toJSON())); 
} 
addMovie: function (movie) { 
    var view = new MovieView({model: movie}); 
    this.$el.find("#movieList").append(view.render().el); 
}, 

Надеется, что это помогает

PS: Это первый раз, когда я вижу в магистральной коде его this.$('something'). Он хранит ссылку JQuery на представление?

+2

'this. $ El.find (" # movieList ")' и 'this. $ (" # MovieList ")' делает то же самое. Это всего лишь стенография, и это было в Backbone довольно долгое время, но не очень хорошо документировано. См. [Http://backbonejs.org/#View-dollar](http://backbonejs.org/#View-dollar) – sQVe

+0

Отличная благодарность, похоже, сейчас работает. Обратите внимание, что правильный код - это. $ El.html (...) 'not' this.el.html (...) ', как было предложено выше. – ehremo