在 knockout sorting seating chart 示例中复制一个项目而不是移动
Copying an item rather than moving in the knockout sortable seating chart example
这是淘汰赛的座位表示例:http://jsfiddle.net/UdXr4/
根据 and this, I tried to change the seating chart example such that the items from available students copied rather than moved as in the jsfiddle here
的回答
变化如下:
......
......
<div class="seats" data-bind="sortable: { data: students, allowDrop: $root.isTableFull, dragged: handleDraggedItem }">
......
......
<div class="new" data-bind="sortable: availableStudents">
<div class="student available" data-bind="text: name"></div>
</div>
.......
.......
Student.prototype.clone = function() {
return new Student(this.id,this.name(),this.gender);
};
.......
.......
this.handleDraggedItem = function(item, event, ui) {
console.log("handleDraggedItem");
**return new Student(0,ui.item.text(),'');**
};
.......
.......
$(".available").draggable({
connectToSortable: ".seats",
helper: "clone",
start: function(event, ui) {
ko.utils.domData.set(event.target, "ko_dragItem", true);
}
});
我无法解决的代码是 handlerraggeditem [return new Student(0,ui.item.text(),'')]。我怎样才能获得除名称(我可以从文本中获取)之外的其他值(id 和性别),以便我可以将它们发送到这里..
因此,拖动项的 $data 的 ID 为 0,性别为 '',如下所示。
{
"id": 9,
"name": "Kylie",
"gender": "female",
"group": "griffindor"
},
{
"id": 0,
"name": "Angel",
"gender": "",
"group": ""
}
真诚感谢任何帮助
谢谢
当用户开始拖动一个元素时,您当前正在为其附加一个 true
的值:
$(".available").draggable({
connectToSortable: ".seats",
helper: "clone",
start: function(event, ui) {
ko.utils.domData.set(event.target, "ko_dragItem", true); // <---
}
});
无论您附加什么数据,dragged:
回调都会接收到第一个参数——在您的例子中,handleDraggedItem
:
this.handleDraggedItem = function(item, event, ui) {
// 'item' is now 'true'
console.log("handleDraggedItem");
};
如果您改为使用 ko.dataFor
查找绑定到拖动元素的 Student
并附加它:
start: function(event, ui) {
var student = ko.dataFor(event.target);
ko.utils.domData.set(event.target, "ko_dragItem", student);
}
您的 handleDraggedItem
处理程序将接收 Student
作为其第一个参数,您可以对其调用 Student.prototype.clone
方法:
this.handleDraggedItem = function(item, event, ui) {
return item.clone();
};
这是淘汰赛的座位表示例:http://jsfiddle.net/UdXr4/
根据
变化如下:
......
......
<div class="seats" data-bind="sortable: { data: students, allowDrop: $root.isTableFull, dragged: handleDraggedItem }">
......
......
<div class="new" data-bind="sortable: availableStudents">
<div class="student available" data-bind="text: name"></div>
</div>
.......
.......
Student.prototype.clone = function() {
return new Student(this.id,this.name(),this.gender);
};
.......
.......
this.handleDraggedItem = function(item, event, ui) {
console.log("handleDraggedItem");
**return new Student(0,ui.item.text(),'');**
};
.......
.......
$(".available").draggable({
connectToSortable: ".seats",
helper: "clone",
start: function(event, ui) {
ko.utils.domData.set(event.target, "ko_dragItem", true);
}
});
我无法解决的代码是 handlerraggeditem [return new Student(0,ui.item.text(),'')]。我怎样才能获得除名称(我可以从文本中获取)之外的其他值(id 和性别),以便我可以将它们发送到这里..
因此,拖动项的 $data 的 ID 为 0,性别为 '',如下所示。
{
"id": 9,
"name": "Kylie",
"gender": "female",
"group": "griffindor"
},
{
"id": 0,
"name": "Angel",
"gender": "",
"group": ""
}
真诚感谢任何帮助
谢谢
当用户开始拖动一个元素时,您当前正在为其附加一个 true
的值:
$(".available").draggable({
connectToSortable: ".seats",
helper: "clone",
start: function(event, ui) {
ko.utils.domData.set(event.target, "ko_dragItem", true); // <---
}
});
无论您附加什么数据,dragged:
回调都会接收到第一个参数——在您的例子中,handleDraggedItem
:
this.handleDraggedItem = function(item, event, ui) {
// 'item' is now 'true'
console.log("handleDraggedItem");
};
如果您改为使用 ko.dataFor
查找绑定到拖动元素的 Student
并附加它:
start: function(event, ui) {
var student = ko.dataFor(event.target);
ko.utils.domData.set(event.target, "ko_dragItem", student);
}
您的 handleDraggedItem
处理程序将接收 Student
作为其第一个参数,您可以对其调用 Student.prototype.clone
方法:
this.handleDraggedItem = function(item, event, ui) {
return item.clone();
};