Как сделать jQuery перемещаемым с фиксированной осью X и Y?

Я не поклонник хранимых процедур

, Хранимые процедуры более удобны в сопровождении потому что: * Вы не должны перекомпилировать свое приложение C# каждый раз, когда Вы хотите изменить некоторый SQL

, Вы закончите тем, что перекомпилировали его так или иначе, когда типы данных изменятся, или Вы хотите возвратить дополнительный столбец, или что бы то ни было. Количество раз можно 'прозрачно' изменить SQL из нижней части приложение, является довольно небольшим на целом

  • , Вы заканчиваете тем, что снова использовали код SQL.

Языки программирования, включенный C#, имеют эту удивительную вещь, вызвал функцию. Это означает, что можно вызвать тот же блок кода от нескольких мест! Удивительный! Можно тогда поместить допускающий повторное использование код SQL в одном из них, или если Вы хотите получить действительно высокую технологию, можно пользоваться библиотекой, которая делает это для Вас. Я полагаю, что их называют Объектными Реляционными Картопостроителями и довольно распространены в эти дни.

повторение Кода является худшей вещью, которую можно сделать, когда Вы пытаетесь создать удобное в сопровождении приложение!

Согласованный, который является, почему storedprocs являются плохой вещью. Намного легче осуществить рефакторинг и разложиться (ворвитесь в меньшие части), код в функции, чем SQL в... блоки SQL?

у Вас есть 4 веб-сервера и набор приложений Windows, которые используют тот же код SQL Теперь, Вы поняли, что существует небольшая проблема с кодом SQL, таким образом, Вы скорее...... изменяете proc в 1 месте или продвигаете код ко всем веб-серверам, переустанавливаете все настольные приложения (clickonce, мог бы помочь) на всех полях окон

, Почему Ваши приложения Windows соединяются непосредственно с центральной базой данных? Это походит на ОГРОМНУЮ дыру в системе безопасности тут же и узкое место, поскольку оно исключает кэширование серверной стороны. Разве они не должны соединяться через веб-сервис или подобные Вашим веб-серверам?

Так, продвиньте 1 новый sproc или 4 новых веб-сервера?

В этом случае легче продвинуть один новый sproc, но по моему опыту, 95% 'продвинутых изменений' влияют на код а не базу данных. При продвижении 20 вещей к веб-серверам в том месяце, и 1 к базе данных Вы едва проигрываете очень, если Вы вместо этого продвигаете 21 вещь к веб-серверам и нуль к базе данных.

более легко код рассматривается.

можно ли объяснить как? Я не получаю это. Особенно видя, поскольку sprocs, вероятно, не находятся в управлении исходным кодом, и поэтому не могут быть получены доступ через веб-браузеры SCM и так далее.

[еще 117] недостатки:

Storedprocs живут в базе данных, которая появляется к внешнему миру как черный квадрат. Простые вещи как желание поместить их в управление исходным кодом становятся кошмаром.

существует также проблема чистого усилия. Могло бы иметь смысл разламывать все на миллион уровней , при попытке выровнять по ширине своему генеральному директору, почему это просто стоило им 7 миллионов долларов для создания некоторых форумов, но иначе создание storedproc для каждой небольшой вещи является просто дополнительным donkeywork ни для какого преимущества.

10
задан Fred Bergman 15 October 2009 в 15:00
поделиться

4 ответа

Я написал плагин, который позволяет перемещать перетаскиваемый объект по обеим осям. Он выполняет свою работу, но его лучше реализовать как виджет jQuery UI , а не как простой плагин jQuery.

Размещенная демонстрация: http://jsbin.com/ugadu/1 (Доступно для редактирования через http://jsbin.com/ugadu/1/edit )

Код плагина:

$.fn.draggableXY = function(options) { 
  var defaultOptions = { 
    distance: 5, 
    dynamic: false 
  }; 
  options = $.extend(defaultOptions, options); 

  this.draggable({ 
    distance: options.distance, 
    start: function (event, ui) { 
      ui.helper.data('draggableXY.originalPosition', ui.position || {top: 0, left: 0}); 
      ui.helper.data('draggableXY.newDrag', true); 
    }, 
    drag: function (event, ui) { 
      var originalPosition = ui.helper.data('draggableXY.originalPosition'); 
      var deltaX = Math.abs(originalPosition.left - ui.position.left); 
      var deltaY = Math.abs(originalPosition.top - ui.position.top); 

      var newDrag = options.dynamic || ui.helper.data('draggableXY.newDrag'); 
      ui.helper.data('draggableXY.newDrag', false); 

      var xMax = newDrag ? Math.max(deltaX, deltaY) === deltaX : ui.helper.data('draggableXY.xMax'); 
      ui.helper.data('draggableXY.xMax', xMax); 

      var newPosition = ui.position; 
      if(xMax) { 
        newPosition.top = originalPosition.top; 
      } 
      if(!xMax){ 
        newPosition.left = originalPosition.left; 
      } 

      return newPosition; 
    } 
  }); 
}; 
8
ответ дан 3 December 2019 в 17:20
поделиться

Я отправляю этот ответ после долгих попыток сказать, что это невозможно с только jqueryui, вызывающим объект. Похоже, это не позволит вам изменить ось ограничения, пока вы уже перетаскиваете.

Пожалуйста, докажите, что я ошибаюсь?

2
ответ дан 3 December 2019 в 17:20
поделиться

У меня нет точного кода для вас, но я мог бы укажет вам правильное направление, помогая вам немного глубже задуматься над проблемой.

Итак, пользователь начинает перетаскивать неограниченный объект. Когда объект перемещается на один пиксель от начальной точки, если первый пиксель находится в любой из этих четырех координат ( x , y ), где x и y являются начальной точкой: ( x -1, y -1), ( x -1, y +1), ( x +1, y -1) или ( x -1, y +1), до сих пор неясно, в какую сторону идти пользователь. Например, если объект находится на единицу вниз и слева, невозможно определить, должно ли ограничение быть по оси x или y.

Когда вы отодвинетесь более чем на один пиксель, это станет легче. Но вам все равно нужно округлить координаты пикселей, где, как и в координатах выше, abs ( xoffset ) == abs ( yoffset ), затем вы можете запустить событие, чтобы применяйте ограничение, когда расстояние по x и / или y больше некоторого произвольного малого целого числа, скажем «3».

Следующая проблема, которую необходимо решить, - насколько далеко от последнего срабатывания ограничения оси вы хотите, чтобы пользователь мог изменить ось. Я предполагаю, что вам нужен эффект сетки, поэтому вам нужно будет установить пороговое значение перемещения в количестве пикселей, прежде чем снимать ограничение и искать следующее «направление», которое пользователь хочет перетащить.

1
ответ дан 3 December 2019 в 17:20
поделиться

используйте событие перетаскивания в своих интересах

$('.selector').draggable({
   drag: function(event, ui) { ... }
});

я не уверен на 100%, как, но внутри вы можете проверить координаты. как сказал ~ Джек-лапланте, это то, где вы бы сравнили. если координаты ближе к оси x, чем к оси y, измените ось на x

//setter
$('.selector').draggable('option', 'axis', 'x');

, если наоборот, измените ее на y. это даст вам движение привязки, чтобы всегда иметь элемент либо на оси x, либо на оси y (от начальной точки). вам нужно будет выполнить проверку, чтобы оставить элемент где бы он ни находился, если бы ось была, скажем, (x + n, y + n), но было бы очень впечатляюще, если бы у кого-то оставалось больше нескольких пикселей на | x | = | y | line.

вы не указали, всегда ли оси остаются там, где они были изначально, или они меняются в зависимости от того, где перетаскиваемый элемент находится в начале перетаскивания (например, если вы немного переместите его, затем отпустите, и попробуй еще немного потянуть). есть начало: и конец: события, которые могут помочь вам с этой частью.

что именно вы пытаетесь перетащить, что не может идти по диагонали, но может идти влево, вправо, вверх и вниз?

3
ответ дан 3 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

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