その場で編集できるようにするにはただcontenteditableを使えばいいというわけでは(ry
「7kai Tasksってその場でタスク編集できないんですか?」
と言われてやってみた。(※画像は開発中のものです)
- 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をローンチしたい。。。