Я обнаружил, что проще использовать коллекцию для сбора потоков в список и использовать thread.value для объединения и возврата значения из потока - это сокращает его до:
#!/usr/bin/env ruby
threads = (1..5).collect do |i|
Thread.new { `echo Hi from thread ##{i}` }
end
threads.each do |t|
puts t.value
end
При запуске , это производит:
Hi from thread #1
Hi from thread #2
Hi from thread #3
Hi from thread #4
Hi from thread #5
У меня была та же проблема, и поскольку мои сортируемые элементы содержали три или четыре элемента, которые можно было щелкнуть (и число было переменным), связывание / отвязывание их на лету не казалось вариантом. Однако случайно я указал опцию
helper : 'clone'
, которая с точки зрения интерфейса вела себя идентично исходному сортируемому объекту, но, по-видимому, не запускала события щелчка на перетаскиваемом элементе и, таким образом, решала проблему. Это такая же хитрость, как и все остальное, но по крайней мере она короткая и легкая ..
Если у вас есть ссылка на событие click для вашего li, вы можете отвязать его в сортируемом методе обновления, а затем использовать Event / one для его повторной привязки. Распространение события может быть остановлено перед повторным связыванием, что предотвратит запуск исходного обработчика кликов.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js"></script>
<script type="text/javascript" charset="utf-8">
var myClick = function () {
console.log('click');
};
$().ready( function () {
$('#my_sortable').sortable({
update: function(event, ui) {
ui.item.unbind("click");
ui.item.one("click", function (event) {
console.log("one-time-click");
event.stopImmediatePropagation();
$(this).click(myClick);
});
console.log('update') },
delay: 30
});
$('#my_sortable li').click(myClick);
});
</script>
<style type="text/css" media="screen">
#my_sortable li {
border: 1px solid black;
display: block;
width: 100px;
height: 100px;
background-color: gray;
}
</style>
</head>
<body>
<ul id="my_sortable">
<li id="item_1">A</li>
<li id="item_2">B</li>
<li id="item_3">C</li>
</ul>
</body>
</html>
Некоторые методы модуля inspect хорошо подходят для этой цели:
import module
import inspect
src = inspect.getsource(module)
-121--2321928- Я запрограммировал несколько веб-сайтов с Lua. Первый был планировщиком рейда для моей гильдии World of Warcraft (так часто вы начинаете программировать в Lua...). Для этого я использовал mod_lua с альфа-версией Apache 2.4. Два других были небольшими площадками конкурсов для клиентов, разработанными с помощью WSAPI, Nginx, Spawn-fcgi и Orbit. Эта установка чертовски быстрая, быстрее mod_lua и всего, что я видел. Страницы будут отображаться мгновенно, как будто они находятся в кэше! Опыт был очень приятным, и Lua делает вас быстро продуктивным. Но тебе лучше быть хорошо организованной. Lua не хватает много батарей, когда дело доходит до веб-разработки, поэтому вам часто приходится реализовывать свои собственные, и это может стать беспорядочным. Поэтому я предлагаю вам спланировать то, что вам понадобится, прежде чем начать. Я использовал свою собственную Lua "ORM" с MySQL и форсированную версию Lua Pages для шаблонов. Посмотрите здесь, если вы хотите дать Lua + Wsapi + Nginx попробовать: http://mascarenhas.github.com/2009/10/24/wsapi-nginx-fcgi.html Я думаю, это лучшая установка.
-121--3808453-Ответ милосердия сработал для меня пару оговорок. Событие click фактически было на элементе дескриптора, а не на самом отсортированном элементе. К сожалению, объект ui не дает ссылки на дескриптор в событии обновления (запрос функции jquery ui?). Так что мне пришлось самому взять ручку. Кроме того, мне пришлось вызвать preventDefault, чтобы остановить действие щелчка.
update: function(ev, ui) {
var handle = $(ui.item).find('h3');
handle.unbind("click");
handle.one("click", function (event) {
event.stopImmediatePropagation();
event.preventDefault();
$(this).click(clickHandler);
});
// other update code ...