江戸一番のジャスタウェイ職人のブログ

江戸一番のジャスタウェイ職人

その場で編集できるようにするにはただcontenteditableを使えばいいというわけでは(ry

「7kai Tasksってその場でタスク編集できないんですか?」

と言われてやってみた。(※画像は開発中のものです)

f:id:s-aska:20130314190659p:plain

  • draggableな要素の上に居る要素をcontenteditable="true"してもうまく編集できるようにならないので子要素のhover(focusに変えた)で親要素のdraggableをスイッチする
  • Enterキーでblurさせる
  • blurしたらAPI叩いて更新する
  • 子要素のclickが親要素に渡ると別の動作してしまうので切っておく

この3点でとりあえずそれっぽくなった。

しかしまだ若干バギーである。安定した。

li.find('span')
	.on('focus', function(e){
		li.prop('draggable', false);
	})
	.on('blur', function(e){
		li.prop('draggable', true);
		var ele = $(this);
		var task = li.data('task');
		var name = ele.text();
		if (name === task.name) {
			return;
		}
		if (name.length) {
			app.task.update({
				list_id: task.list.id,
				task_id: task.id,
				name: name
			});
		} else {
			ele.text(task.name);
		}
	})
	.on('keydown', function(e){
		e.stopPropagation();
		if (e.keyCode === 13) {
			e.preventDefault();
			this.blur();
		}
	})
	.on('click', function(e){
		e.preventDefault();
		e.stopPropagation();
	});

夏までにはversion 4をローンチしたい。。。