Библиотека rightjs javaScript в ежедневном использовании [закрыто
-
02-10-2019 - |
Вопрос
Интересно, если кто-нибудь здесь может предложить любое представление о UPS / Difts с использованием Rightjs. Библиотека, специально по сравнению с jQuery и, как правило, сравнивается с тем, что вы думаете, что библиотека должна предложить.
Я не так много ищешь функцию, чтобы особенность сравнения, а скорее ощущение общего ежедневного использования.
Вещи как:
- Он чувствует себя естественным использовать, или он чувствует себя как в гору сражение?
- API выражает себя довольно понятно, или вы задаетесь вопросом, что в код вы написали 3 недели назад?
- Вы хотите, чтобы у него была какая-то особенность jQuery (или какая-то функция в целом) или обратно, вам нравится какая-то особенность, что другие библиотеки не имеют?
- Общие философские соображения, которые вы думаете, делают превосходное / ухудшенное.
Не такие как:
- Mindshare / MarketShare / Plugins / CDN / соображения (победитель очевиден)
- Почему ты беспокоишь ... (спорный)
- jQuery делает X, Y и Z, и rightjs, не предлагая понимание того, как оно влияет на ежедневное использование (могут быть философские причины, которые делают x, y и z ненужным)
Решение
На основе документации, образцы кода и что уже в работах для Rightjs 2., Я очень впечатлен.
@Patrick - спасибо за то, что указывал Вызов по имени Особенность в rightjs, которая кажется чрезвычайно полезной для удаления самых анонимных функций со всей страницы. Для тех, кто с ним не знаком, идея состоит в том, чтобы указать имя метода и аргументы в качестве параметров вместо создания анонимного обратного вызова. Например, если мы пытаемся отфильтровать все слова и сформулировать, что начинается с «Hello» из массива,
var words = ['stack', 'hello world', 'overflow', 'hello there'];
Используя метод фильтра на массивах, мы бы написали:
words.filter(function(word) {
return word.indexOf('hello') === 0;
});
Мы можем написать одно и то же, используя вызов по имени в rightjs, как,
words.filter('startsWith', 'hello');
Довольно сладкий эх?
Я также люблю идею быть способным использовать строки в качестве селекторов напрямую. Хотя rightjs только делает это для Делегация событий На данный момент, но я хотел бы быть в состоянии полностью избавиться от $
Функция для большинства целей и напрямую вызов методах на строке. Например, чтобы прослушать все клики на любом пункте на странице, напишите:
'p'.on('click', function() {
this.addClass('clicked');
});
Или, возможно, комбинируйте это с вызовом по имени,
'p'.on('click', 'addClass', 'clicked');
Вещи, которые я возбуждаюсь в rightjs 2, - это способность использовать виджеты в качестве собственных элементов.
var calendar = new Calendar();
calendar instanceof Calendar; // true
calendar instanceof Element; // true
Благодаря @Patrick и @nikolay за уточнение моего предположения здесь. Виджет обернет нативный элемент DOM, который доступен как _
Собственность на объекте.
document.body.appendChild(calendar._);
или используйте методы, предоставленные рамками.
calendar.insertTo(document.body)
Другая хорошая особенность - это единый способ инициализации виджетов, используя только декларативный синтаксис:
<input data-calendar="{format: 'US', hideOnClick: true}" />
Вместо того, чтобы создать объект самого себя, а затем добавлять его на страницу:
var calendar = new Calendar({
format: 'US',
hideOnClick: true
});
calendar.insertTo(document.body);
Я взял слайды из презентации под названием Обзор библиотеки JavaScript john recig и сравнил образцы кода для jQuery с rightjs. Эти образцы в основном сравнивают основной синтаксис для обоих рамок, которые более похожи, чем разные, хотя воспринимающие, кажется, более гибким в своем использовании.
DOM Traversal
jquery
$('div > p:nth-child(odd)')
Rightjs.
$$('div > p:nth-child(odd)')
Модификация DOM
jquery
$('#list').append('<li>An Item</li>')
Rightjs.
$('list').insert('<li>An Item</li>')
События
jquery
$('div').click(function() {
alert('div clicked')'
});
Rightjs.
$$('div').onClick(function() {
alert('div clicked');
});
Ajax.
jquery
$.get('test.html', function(html) {
$('#results').html(html);
});
или
$('#results').load('test.html');
Rightjs.
Xhr.load('test.html', {
onSuccess: function(request) {
$('#results').html(request.text);
}
}).send();
или
$('results').load('test.html');
Анимация
jquery
$('#menu').animate({ opacity: 1 }, 600);
Rightjs.
$('menu').morph({ opacity: 1 }, { duration: 600 });
Массивная обход
jquery
$.each(myArray, function(index, element) {
console.log(element);
});
Rightjs.
myArray.each(function(element) {
console.log(element);
});
Другие советы
Привет, люди, Николай, автор правых здесь здесь.
Благодаря Anurag, он очень хорошо описал восходящие. И пара заметок, хотя.
Вы на самом деле уже можете смешивать строку # включенные и вызовы по имени, как вы описали
"div.boo".on('click', 'toggleClass', 'marked');
Тогда в rightjs2, который будет иметь релиз RC2 прямо на завтра, вы сможете делать такие вещи, как
"div.boo".onClick('toggleClass');
"div.boo".observes('click'); // true
"div.boo".stopObserving('click');
И вы также сможете использовать любые пользовательские события с теми, как это так
"div.boo".on('something', 'addClass', 'something-happened');
Пользовательские события в rightjs2 пузырь, имеют цели и все, что вам нужно.
Затем о домовых обертках и Calendar
, да, элементы и виджеты будут в одной иерархии DOM-обертков, и вы сможете бросить их так же, как это
$(document.body).insert(new Calednar(...));
Вы также сможете манипулировать с ними на уровне DOM, используя прямой доступ к сырому объекту DOM, например,
var calendar = new Calendar();
document.body.appendChild(calendar._);
Кстати: Патрик. Если вы случайно используете Rails, вы также должны проверить плагин правой направляющей, есть довольно много хороших вещей на интеграции JavaScript и Rails.
Тогда, если вы спросите о подлинном чувстве, работающих с rightjs, я бы сказал, что это зависит. Rightjs был построен для людей с серверными людьми, которые раньше работали с классами и объектами, есть довольно много вещей для быстрого и Agile Development для решения простых проблем, но, чтобы максимально получить его, что вам нужно подумать в объектах. Если у вас также произошло опыт работы с прототипом или Ruby, большинство вещей должно быть довольно знакомым, я попытался повторно повторно использовать как можно больше имен методов.
Если все, что вы знаете, это jQuery, некоторые вещи могут выглядеть немного странно с самого начала, но я видел несколько парней, которые счастливо мигрировали с jQuery. Так что я думаю, вы будете в порядке.
Что касается читаемости кода, ИМХО это абсолютно пинает задницу. Читабежность была одной из основных проблем в развитии rightjs, вы можете прочитать большую часть кода, как простой английский
"div.zing".on('click', 'toggleClass', 'marked');
$('my-element').update('with some text').highlight();
$$('li').each('onClick', 'toggleClass', 'marked');
И так один. Проверьте эту страницу, если вы еще не http://rightjs.org/philosophy.
Это об этом. Спросите, есть ли у вас еще вопросы.
Я правой, преобразую. Я впечатлен философией, он, кажется, признает, что элементы DOM - это просто данные, где jQuery, кажется, основывает свою целую идентичность на доме.
Я использую jQuery в моем днежу, но найди себя, нуждающимся в том, чтобы использовать его в сочетании с underscore.js, чтобы делать приятные функциональные программирования. В rights вы получаете много приятных церков FP, доступные в качестве методов на родных объектах.
Вот небольшое сравнение, показывающее, как тот же метод работает на простых массивах и коллекциях DOM в правом JS:
Некоторые HTML:
<ul id="test">
<li data-id="one">one</li>
<li data-id="two">two</li>
<li data-id="three">three</li>
</ul>
Массив:
var test = [{"data-id":"one"},{"data-id":"two"},{"data-id":"three"}];
Фильтрация HTML, довольно похожее:
//jQuery:
var filtered = $("#test li").filter(function(element) {
return $(element).attr("data-id") == "one";
});
//RightJS
var filtered = $$('#test li').filter(function(element) {
return element.get("data-id") == "one";
});
Фильтрация массива:
//you can't do this with jquery because it is DOM-specific.
//you need something like underscore:
//underscore:
var filtered = _.select(test, function(element) {
return element["data-id"] == "one";
});
//RightJS << uses the same .filter() method as used on the html!
var filtered = test.filter(function(element) {
return element["data-id"] == "one";
});
В rightjs я хотел бы увидеть некоторые дополнительные вещи, которые имеет подчеркивание, например .range () и возможность писать в стиле «FP», либо «OOP», поэтому я могу использовать исключительно подходящие. Угадай, я лучше вносят :)
Сказав это, как я понимаю, большой фокус с jQuery в наши дни - мобильная совместимость. Если это является серьезной проблемой, все равно может быть лучше всего пойти с jQuery.
Я думаю, что это лучший возможный вариант, чтобы измениться естественным путем от прототисты. Довольно похоже.
@Nikolay Вы были прототипным пользователем?