Невозможно понять пример использования backbone.js

Я изучаю backbone.js после этого учебника , но я столкнулся с проблемой, понимающей первый пример:

(function($){
  var ListView = Backbone.View.extend({
    ...
    initialize: function(){
      _.bindAll(this, 'render');//fixes loss of context for 'this' within methods

       this.render();//not all views are self-rendering. This one is.
    },
    ...
  });
  ...
 })(jQuery);

Q1: Зачем использовать (function ($) {}) (jQuery) ; вместо отлично работающего (function() {}) (); ?

Q2: Что делает _. BindAll (this, 'render') ? Как он исправляет потерю контекста для «этого» внутри метода?

0
nl ja de

2 ответы

Q1: передавая jQuery в качестве параметра, вы позволяете себе 2 вещи:

  1. , если возникает необходимость использования двух версий jQuery - вы готовы
  2. шаблон модуля, вероятно, лучше воспринимается как что-то хорошо инкапсулированное и с четко определенными зависимостями, поэтому, объявив, что jQuery является параметром - вы объявляете ясную зависимость. Конечно, есть другие способы сделать это (например, RequireJS ), но это также способ

Q2: bindAll - это утилитный метод от Underscore.js, который связывает this для определенного метода - таким образом, когда этот метод вызывается (в качестве обратного вызова, например), правильный < code> этот будет использоваться внутри него.

Например:

(function($){
  var ListView = Backbone.View.extend({
    ...
    initialize: function(){
       //fixes loss of context for 'this' within methods
        _.bindAll(this, 'render', 'makestuff'); 

        this.render();//not all views are self-rendering. This one is.
    },
    ...
    makestuff : function() { 
        ... 
        this.stuff = ...//some action on the list's instance
    }
  });
  ...
 })(jQuery);

и в некоторой части вашего кода вы делаете что-то вроде:

var list = new ListView({...});
$('#button').on('click', list.makestuff);

this in makestuff method is a reference to the above list and not whatever context the on function is in when makestuff is actually invoked inside it.

Фактическая реализация основана на использовании функций apply и call для привязки контекста выполнения функции к определенному объекту.

8
добавлено
проверил вас для более подробного объяснения, спасибо
добавлено автор CarlLee, источник

(function($){})(jQuery) passes jQuery to the self executing which is using it as $. This makes sure you can safely use the $ symbol inside the closure without having to worry about interference with other libraries or even other versions of jQuery. A common example for this practice would also be passing in window and document and then using shorthands inside the closure:

(function(w, d, $){
$(w).resize(function({}); //equals $(window) now
})(window, document, jQuery);

Подчеркнутый код _. bindAll выполняет следующие действия:

Привязывает множество методов к объекту, указанному именами методов, для   выполняться в контексте этого объекта при каждом вызове. Очень   удобный для функций привязки, которые будут использоваться как событие   обработчиков, которые в противном случае вызывались бы с этим бесполезным.   Если не указано имя метода, вся функция объекта   свойства будут привязаны к нему.

Подробнее см. аннотированный источник .

2
добавлено
спасибо, другой ответ объяснен более подробно, жаль, что я его предал
добавлено автор CarlLee, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском