Backbone.js переопределяет $ () и this.el исчезает - PullRequest
0 голосов
/ 05 февраля 2012

Похоже, что backbone.js (или Javascript?) Ведет себя странно, чего я не ожидал. Это мое (упрощенное) представление Backbone (в CoffeeScript):

class Application.Views.Sidebar.SidebarView extends Backbone.View
  el: "#backbone-sidebar"
  template: JST["backbone/templates/sidebar"]

  initialize: () ->
    # Yes, I am currently skipping addOne and addAll functions,
    # because it is not needed to reproduce the problem
    Articles.bind 'all',     @render

    Articles.fetch()

  render: =>
    $(@el).html(@template())
    @ 

Проблема в функции render: @el не определено, когда я запускаю это в отладчике. Также функция $() переопределена backbone.js для некоторой оболочки getElementById. Когда я использую window.$("#backbone-sidebar"), я получаю правильную функциональность jQuery, но это всего лишь обходной путь.

Нет ли способа получить jQuery $()?

А почему @el не определено?

1 Ответ

3 голосов
/ 06 февраля 2012

Спасибо за комментарии. Теперь я могу ответить на вопросы самостоятельно. Чтобы исправить проблемы, я добавил window.Sidebar = new Application.Views.Sidebar.SidebarView к $ ->, что заставляет его ждать загрузки дерева DOM. Это эквивалент CoffeeScript оборачивания в $(function() {});

Дальнейшее объяснение:

1. this.el исчезает:

В отличие от spine.js (который я использовал ранее), backbone.js, похоже, ищет селектор, указанный в el. Если он не может найти селектор, this.el будет неопределенным.

2. $() переопределено

Если вы оцениваете $ в отладчике Chrome, он вернет некоторую функцию, которая не выглядит как что-либо полезное. Я не смог понять, что именно происходит, но $("some-random-css-selector") сработал, как и ожидалось.

...