Pull to refresh

Comments 20

Делегирование нужно использовать там, где это действительно необходимо. Бесконечная прокрутка — хороший тому пример. Вот только я бы отказался от такого явного использование селекторов, как-то это не вписывается в идеологию ангуляра :)

Я бы сделал это как-то так. К этому решению бы добавить возможность явно указать какие типы событий мы хотим делегировать, но что-то меня в этом решении смущает.
В общем я пока прихожу к выводу, что пока я не увижу проблем с производительностью, заморачиваться не стоит. А как начнутся — создам ишью в репозитарии angular, пусть у разработчиков болит голова :)
Ну, кхм, такой подход тоже сомнителен, разработчики вам ничем не обязаны. В любом случае решение проблемы кроется в осознании того, что ангуляр не серебряная пуля и использовать его надо с умом, как и любой другой инструмент :) Прошу прощения, если не распознал в последнем предложении вашего комментария сарказм.
Не сарказм, просто шутка, даже смайл поставил. Да ангуляр не серебрянная пуля, но он мне прям очень по душе пришелся (сам не пойму, почему), а в купе с тем, что фронтенд не является моей сильной стороной — пытаюсь подходить в основательно, разглядывать границы применения, чтоли.
Это имеет смысл если вы еще по многим другим причинам используете jQuery в вашем проекте. А иначе лучше только средствами AngularJS обойтись и не подключать jQuery вообще.
Вы не указали самый главный минус подхода назначения событий в jQuery: события которые вешаются подобным образом непонятно откуда применяются и непонятно к чему (то есть разобраться потом очень проблематично человеку со стороны). Чему собственно и является противоположным декларативный подход AngularJS.

Непонятно почему вас не устроил вариант с директивой. Или даже просто назначение ng-click внутри ng-repeat. Не могли бы вы описать поподробнее? (с примерами)
Ну пока что да, я за самый простой подход с ng-click, вроде codepen.io/anon/pen/Fobmf/
Если коротко, то вот (какой-то неудобный Codepen):
$scope.selectFriend = function( index ) {

     $scope.selectedFriend = $scope.friends[index];

 };

<ul>
    <li ng-repeat="friend in friends">
        <a href="#" ng-click="selectFriend( $index )">{{ friend.name }}</a>
    </li>
</ul>


По поводу того, что не указал главный минус, я написал:
привычный многим императивный способ назначения обработчика для группы элементов

не совсем приемлем в декларативном AngularJS


Почему не подошел способ с директивой? Честно говоря, имхо, я решил что это оверхед для меня в данный момент.
Тоже придерживаюсь такого подхода, гораздо нагляднее и вроде как angular way. Директиву обычно не считаю лишним оверхедом, но зачастую просто лень для простых случаев ее использовать.
Вы можете модифицировать переменные родительского scope через $parent. То есть достаточно такого кода:

<ul>
    <li ng-repeat="friend in friends">
        <a href="#" ng-click="$parent.selectedFriend = friend">{{ friend.name }}</a>
    </li>
</ul>

UFO just landed and posted this here
Попробуйте Ember.js ради добра:
Ember delegates all events to the application's root element (usually the document body) using jQuery. When an event occurs, Ember identifies the nearest view that handles the event and invokes its event handler.
Ох, незнаю. Пробежался по Ember, выглядит неплохо. Но дело в том, что надо же на чем-то остановиться. Мне по душе пришелся декларативный подход.
Конечно, по душе, так по душе. А вот «надо же остановиться» напомнило недавно прочитанное от того, кто остановился на БЭМ:
Я начинаю потихоньку понимать выражение «БЭМ головного мозга», ну а что поделать, больного уже не спасти.
Делегирование борется со следствием, а не с причиной. Обычная причина это куча элементов (и обработчиков) на странице. Поэтому решать нужно ее, удаляя элементы вне экрана.
Имхо, подкрепленноенулевым опытом: это до определенной степени несемантично, что ли. Если существует список из n позиций, то он им и должен быть. Да и удалять-добавлять элементы в «viewport» тоже, в общем-то, накладно.
Это так же семантично как обычная пагинация. Другое дело, что «лучшие умы» заняты написанием очередного фреймворка в 30 строчек кода, а до решения действительно сложной и необходимой задачи так ни у кого руки не дошли.
Sign up to leave a comment.

Articles

Change theme settings