Небольшая модификация первоначального ответа:
$('#Clicker').mousedown(function () {
//do something here
timeout = setInterval(function () {
//do same thing here again
}, 500);
return false;
});
$('#Clicker').mouseup(function () {
clearInterval(timeout);
return false;
});
$('#Clicker').mouseout(function () {
clearInterval(timeout);
return false;
});
При событии mouseout на Clicker оно останавливается, когда вы перемещаете мышь из области щелчка.
Причина, по которой я предлагаю сделать одно и то же дважды, состоит в том, чтобы получить более плавный эффект. Если вы не сделаете это один раз до того, как будет установлено время ожидания, в этом случае будет задержка в 500 мс, прежде чем что-то произойдет.
Ваш выбор ограничен базовой технологией, которую вы хотите использовать для доступа к данным. На данный момент существует несколько альтернатив, которые поддерживает набор инструментов VS и платформа .Net:
DataTable
объекты в коде. IQueryable
и синтаксис LINQ в коде. Исходя из этого, все, кроме типизированных наборов данных ADO.Net, позволяют вам определять отношения навигации, как вы спрашиваете, загружаясь с нетерпением или лениво. В случае, подобном тому, который вы описываете, естественным ходом, связанным с этими технологиями, было бы явное моделирование отношений между новостной статьей и автором в конструкторах и предоставление фреймворку возможности решать проблему загрузки соответствующих данных в соответствующие типы, что в конечном итоге означает что проблема соединения неявно обрабатывается уровнем доступа к данным приложения (фреймворком), а не явно созданной хранимой процедурой.
Выбор технологии будет происходить повсюду в вашем коде, от способа получения данных до их отображения и обновления - ни одна из этих технологий не является легко взаимозаменяемой. Лично я считаю, что LINQ to SQL обеспечивает правильный баланс мощности и сложности.
Вы можете попробовать это, возможно, не лучшее решение:
void ShowNews()
{
User[] usersConcerned = News.GetAllUsersLinkedWithNews(); //only return the users concerned by the news
List<News> news = News.GetAllNews();
foreach(News item in news)
{
item.AddedByUser = usersConcerned.FirstOrDefault(u=>u.Id == item.AddedByUserID);
}
rptNewsStories.DataSource = news ;
rptNewsStories.DataBind();
}
Хороший вопрос:
Есть пара подходы, которые вы можете предпринять:
Вы можете получить дополнительные данные, которые вам нужны в событии привязки ретранслятора, и заполнить их «заполнителем» для каждой возвращаемой записи новостей. У этого есть проблемы с производительностью из-за дополнительных запросов, но это будет работать.
Если возможно, я бы изменил объект новостей, чтобы он содержал дополнительную информацию, или создал объект, который наследуется от объекта новостей, который содержал дополнительную информацию или свойства. внутри.
Надеюсь, это поможет :-) +1
Редактировать / Комментарий: I think the friction you are seeing in your design is that you aren't acknowledging the "has-a" relationship between your news object and what I'd call its author/contributor. The join you are doing in your query is just disguising the lack of the relationship in the object model.