gpt4 book ai didi

ember.js - 带有拖放功能的示例任务应用程序

转载 作者:行者123 更新时间:2023-12-04 19:06:13 25 4
gpt4 key购买 nike

应用程序.js

App = Em.Application.create();

App.IndexRoute = Em.Route.extend({
model: function(){
return {
newTasks: Em.A([
{id: 1, name: "Task 1"},
{id: 2, name: "Task 2"},
{id: 3, name: "Task 3"}
]),
inProgressTasks: Em.A([
{id: 4, name: "Task 4"},
{id: 5, name: "Task 5"}
]),
doneTasks: Em.A([
{id: 6, name: "Task 6"}
])
};
}
});

App.IndexController = Em.Controller.extend({
actions: {
moveTask: function(taskID, from, to){
var model = this.get('model');
var task = model[from].findProperty('id', parseInt(taskID, 10));
model[to].pushObject(task);
model[from].removeObject(task);
}
}

});

App.TaskContainerComponent = Em.Component.extend({
classNames: ['col-xs-4', 'taskContainer'],
isOverdrop: false,
classNameBindings: ['isOverdrop:isOverdrop'],

setOverdropIfNotOriginator: function(event, valueToSet){
var data = JSON.parse(event.dataTransfer.getData('text/data'));
if(data.stage !== this.get('stage')) {
this.set('isOverdrop', valueToSet);
}
},

dragEnter: function(event) {
this.setOverdropIfNotOriginator(event, true);
},

dragLeave: function(event){
this.setOverdropIfNotOriginator(event, false);
},

dragOver: function(event){
this.setOverdropIfNotOriginator(event, true);
event.preventDefault();
},

drop: function(event) {
var data = JSON.parse(event.dataTransfer.getData('text/data'));
if(data.stage === this.get('stage')) return;

// from: data.stage, to: this.get('stage')
this.sendAction('action', data.id, data.stage, this.get('stage'));
this.set('isOverdrop', false);
}

});

App.DragTaskComponent = Em.Component.extend({
dragStart: function(event) {
var data = { id: this.get('task.id'), stage: this.get('stage')};
event.dataTransfer.setData('text/data', JSON.stringify(data));
}
});

索引.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mini Scrumboard</title>
<link href="http://getbootstrap.com/dist/css/bootstrap.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<script type="text/x-handlebars" data-template-name="index">
<div class="contents">
<div class="row">
{{ task-container containerTitle="New" stage="newTasks" tasks=model.newTasks
action="moveTask" on="drop"}}
{{ task-container containerTitle="In Progress" stage="inProgressTasks"
tasks=model.inProgressTasks action="moveTask" on="drop" }}
{{ task-container containerTitle="Done" stage="doneTasks" tasks=model.doneTasks
action="moveTask" on="drop" }}
</div>
<br>
<br>
</div>
</script>

<!-- Properties: task, stage -->
<script type="text/x-handlebars" id="components/drag-task">
<div class="task" draggable="true">
{{task.name}}
</div>
</script>

<!-- Properties: containerTitle, stage, tasks -->
<script type="text/x-handlebars" id="components/task-container">
<h3>{{containerTitle}}</h3>
{{#each task in tasks}}
{{drag-task task=task stage=stage}}
{{/each}}
</script>

<script src="js/libs/jquery-1.10.2.js"></script>
<script src="js/libs/handlebars-1.1.2.js"></script>
<script src="js/libs/ember-1.5.1.js"></script>
<script src="js/app.js"></script>
<!-- to activate the test runner, add the "?test" query string parameter -->
<script src="tests/runner.js"></script>
</body>
</html>

我在我的本地机器上运行得很好,但它在 jsbin 上出错了。

http://emberjs.jsbin.com/movex/4/edit?html,css,js,output

我猜这个问题与解析拖放的输出有关,但不知道该去哪里。

任何帮助将不胜感激...

更新:JSBin 版本甚至可以在 Mac 上的 FF 上正常工作,但不能在 Safari 或 Chrome 上运行... :(

最佳答案

它不工作的原因是因为 the drag and drop specifications 非常出乎意料的方式。工作。问题是在drag , dragEnter , dragLeave , dragOverdragEnd事件 dragTransfer 数据处于保护模式。这又是根据规范的意思。

the data itself is unavailable and no new data can be added.



似乎 Mozilla 运用了一些常识,并没有按照规范实现拖放。这解释了为什么它在 Firefox 中为您工作,但在其他地方却无能为力。

为了让你的 jsbin 工作,我添加了一个 theData元素添加到您的索引 Controller ,并针对它设置和获取 JSON 值。

这是工作版本。 http://emberjs.jsbin.com/dasonona/1/edit

关于ember.js - 带有拖放功能的示例任务应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com