Библиотека rightjs javaScript в ежедневном использовании [закрыто

StackOverflow https://stackoverflow.com/questions/3595811

Вопрос

Интересно, если кто-нибудь здесь может предложить любое представление о 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 Вы были прототипным пользователем?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top