JavaScript-библиотека RightJS для повседневного использования [закрыто]

15
задан user113716 29 August 2010 в 17:30
поделиться

2 ответа

Основываясь на документации, примерах кода и том, что уже находится в разработке для RightJS 2, я очень впечатлен.

@Patrick. Спасибо, что указали на функцию Вызов по имени в RightJS, которая кажется чрезвычайно полезной для удаления большинства анонимных функций со всей страницы. Для тех, кто не знаком с этим, идея состоит в том, чтобы указать имя метода и аргументы в качестве параметров вместо создания анонимного обратного вызова. Например, если мы пытаемся отфильтровать все слова и фразы, начинающиеся с «привет», из массива,

var words = ['stack', 'hello world', 'overflow', 'hello there'];

Используя метод filter для массивов, мы должны написать:

words.filter(function(word) {
    return word.indexOf('hello') === 0;
});

Мы можем написать то же самое, используя Call By Name. в 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 Джона Резига и сравнение примеров кода для jQuery с RightJS. В этих примерах в основном сравнивается базовый синтаксис для обеих платформ, который больше похож, чем отличается, хотя RightJS кажется более гибким в своем использовании.

Обход DOM

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);
});
14
ответ дан 1 December 2019 в 02:18
поделиться

Привет, Николай, тут автор RightJS.

Благодаря Анурагу, он довольно хорошо описал RightJS. И все же пара замечаний.

На самом деле вы уже можете смешивать String#on и вызовы по имени, как вы описали

"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, имеют цели и все, что вам нужно.

Тогда насчет dom-оберток и Calendar, да, элементы и виджеты будут в одной иерархии dom-оберток, и вы сможете просто так их разбрасывать

$(document.body).insert(new Calednar(...));

Вы тоже будете может манипулировать ими на уровне дома, используя прямой доступ к необработанному объекту дома, например

var calendar = new Calendar();
document.body.appendChild(calendar._);

BTW: Патрик. Если вы случайно используете Rails, вам также следует проверить плагин right-rails, в котором есть немало действительно хороших вещей по интеграции JavaScript и Rails.

Тогда, если вы спросите об истинном чувстве работы с RightJS, я бы сказал, что это зависит от обстоятельств. RightJS был создан для тех, кто занимается серверной частью и раньше работал с классами и объектами. Существует довольно много вещей для быстрой и гибкой разработки, позволяющих легко решать простые проблемы, но чтобы получить максимальную отдачу, вам нужно мыслить объектами. Если у вас также был опыт работы с Prototype или 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

Вот об этом. Спросите, есть ли у вас еще вопросы.

10
ответ дан 1 December 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: