- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的项目中,我有一个 Rails API 后端,其中我使用 acts_as_list gem 和 Vue 前端,其中我使用 Vue Draggable 包。
拖动操作有效,我看到一个 PUT 请求被发送到我的服务器。然而,有一些奇怪的事情发生了:
场景 1:我将一个项目从位置 1 拖到位置 2(因此它们基本上是触发器)。正在发送 PUT 请求,但未发生实际更新。
场景 2:我将一个项目从位置 1 拖到位置 3。这意味着位置 2 应该向上移动到 1,2 应该向上移动到 1,而 1 应该在 3 中(希望这有意义)。这很奇怪,因为有时我看到我的服务器上发生了更新,但不是每次都这样。
我需要的是在拖动时更新整个列表。
TodoList.vue
<template>
<div class="todos-container" v-if='trips.loaded'>
<draggable
:list='todoList'
:options='{animation:150}'
tag='ul'
class='list-group'
@change='changed(todoList, $event)'
>
<transition-group type='transition'>
<li v-for='(todo, index) in todoList' :key='todo.id' class='list-group-item'>
<v-icon class='drag-handle'>drag_handle</v-icon>
<v-checkbox
v-model="todoList[index].completed"
:ripple='false'
:label='`${todo.title}`'
color='primary'
@change='handleTodoClick(todo, index)'
/>
<v-icon class='remove-todo' @click='handleTodoDelete(todo, index)'>close</v-icon>
</li>
</transition-group>
</draggable>
</div>
</todo-list-styles>
</template>
<script>
import { mapActions } from 'vuex';
import draggable from 'vuedraggable';
export default {
props: {
trips: {
type : Object,
},
index: {
type : Number,
required: true,
}
},
computed: {
todoList() {
return this.trips.data[this.index].todos;
}
},
methods: {
...mapActions('trips', [
'updateTodoPosition'
]),
handleTodoClick: function(todo, index) {
console.log('checked')
},
handleTodoDelete: function(todo, index) {
console.log('clicked');
},
changed: function(todoList, $event) {
const {oldIndex, newIndex} = $event.moved;
const todo = todoList[newIndex];
const payload = {
oldIndex,
newIndex,
todo,
};
this.updateTodoPosition(payload);
},
},
components: {
draggable,
},
}
</script>
参数
Started PUT "/2/update_todo_position" for 127.0.0.1 at 2019-05-13 08:46:09 -0500
Processing by V1::TripsController#update_todo_position as */*
Parameters: {"oldIndex"=>0, "newIndex"=>2, "todo"=>{"id"=>2, "title"=>"Book Car Rental", "completed"=>true, "position"=>2}, "todo_id"=>"2", "trip"=>{"oldIndex"=>0, "newIndex"=>2, "todo"=>{"id"=>2, "title"=>"Book Car Rental", "completed"=>true, "position"=>2}}}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
TodoItem Load (0.2ms) SELECT "todo_items".* FROM "todo_items" WHERE "todo_items"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]]
(0.2ms) BEGIN
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
UpcomingHike Load (0.3ms) SELECT "upcoming_hikes".* FROM "upcoming_hikes" WHERE "upcoming_hikes"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
(0.2ms) COMMIT
Completed 200 OK in 5ms (ActiveRecord: 1.1ms)
trips_controller.rb
module V1
class TripsController < ApplicationController
...
def update_todo_position
# TODO: Figure out why position being saved is incorrect
todo = TodoItem.find(params[:todo][:id])
todo.update!(position: params[:newIndex])
head :ok
end
...
end
end
最佳答案
最终走了一条我不引以为豪但可行的路线。从我的前端,我发送了整个新订购的列表。然后在我的 Controller 中,我滚动浏览每一个并单独更新它们的位置。绝对不是 VueDraggable 推荐的做法,也绝对不是在我的 Controller 中处理它的有效方式:
vue组件方法:
changed: function(todoList, $event) {
const {newIndex} = $event.moved;
const todo = todoList[newIndex];
const newListOrder = JSON.stringify(this.todoList.map(todo => todo.id));
const payload = {
todo,
newListOrder,
}
this.updateTodoPosition(payload);
},
Controller :
def update_todo_position
newListIds = params[:_json]
newListIds.each.with_index(1) do |todo, index|
todo = TodoItem.find(todo)
todo.update(position: (index))
end
head :ok
end
如果有人有任何建议,我很乐意听取!
关于javascript - Vue-Draggable & Acts As List - 如何更新整个列表位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56113942/
我不太明白单元测试中模式的安排部分和行为部分之间的区别。 Arrange ONLY 是否意味着对象的创建?为什么我们首先要将 Arrange 与 Act 部分分开,以及决定某物是否属于 Act 而不是
我有一个问题...我正在制作一个关于 GIS 的简单程序,当我尝试将它从 eclipse 启动到我的设备时,我在检查控制台时收到警告。 ActivityManager: java.lang.Secur
当对单个逻辑操作的结果和/或副作用进行单元测试时,您如何保持代码的 DRY?以 Jasmine 编写的以下示例为例: describe("frobnicate", function () { va
我对编码相当陌生,但在编译时(我使用 putty 和 SHH)我收到此错误 act.offective.c:631:警告:内置函数“abort”的隐式声明不兼容act.offense.c:637: 警
我有一个用 ASP.NET MVC (V 1.0) 编写的应用程序。该应用程序在 IIS7 上运行,DNS 由 GoDaddy 提供。 我想转发来自 http://mydomain.com/ctrlr
好的,我有一个设置了高度和宽度的简单 div。前后也设置了高度和宽度。它们都设置为显示为 block ,伪元素的内容为“”。 :before 在内容里面,而不是在它之前。:after 之前有一大堆奇怪
当我使用 dplyr 中的 filter 时,我很难理解 R 是如何处理 AND 和 OR 运算符的。 这里有一个例子来说明: library(dplyr) xy xy x y z 1 1 a
因此,在为我的 rails 应用程序搜索标记 gem 后,我发现了惊人的 acts-as-taggable gem 。安装它并玩转我发现它将所有标签保存在一个标签数据库中,它只保存 Tag.name
我有一个 azure 应用程序服务,可以从 azure ACR 中提取图像并启动该图像来运行应用程序。 我想要应用程序服务通过服务原则从 ACR 中提取图像的操作。我的问题是我应该将服务主体分配给哪个
问题 据我所知,清除 float 主要作用于父项。但是在帖子缩略图之后我的模板中存在一个问题,其中 clear: both 作用于整个内容包装器。如果不清除 float ,细线会粘在缩略图右侧的文本上
我试图显示一个带有子元素的 div 容器,只显示容器的顶部,直到鼠标移到它上面,然后显示带有内容的子元素的整个容器。这有点像我想要的那样工作,但问题是,如果您将鼠标移到任何子元素上,整个主容器会向上滑
我正在学习 ACT-R 独立 Windows 发行版中包含的教程文件。这不是任何学术作业的一部分;我正在努力学习认知建模和编写生产系统。我正在使用 Lispbox,一个 EMACS-SLIME-LIS
我正在尝试使用 Acts as votable gem 对帖子中的评论实现投票系统。在这个阶段我遇到了这个错误 ActionController::UrlGenerationError in Post
我最近在我的应用程序中用 acts_as_taggable_on 替换了 acts_as_taggable_on_steroids 并且我一直遇到一个问题,即 Rails 找不到与新插件关联的类。我认
我需要一种功能,允许将消息异步推送到我的 PublishSubject 并通过 ConnectableObservable 以一定的速度(实际上是一个接一个)处理它们。不幸的是,在底层的Subscri
我读过的所有教程都是这样的: class HelloWorldActor extends Actor { def receive = { case "Hello" => self.repl
我在我的 GUI 的一部分上进行了以下基本设置: 一个JScrollPane在其上,带有 BoxLayout 的 JPanel (new BoxLayout(tablePanel, BoxLayout
当我运行游戏并单击屏幕退出启动画面时,它应该将我带到主菜单,但它只是卡住了。我找到了错误告诉我的代码行,但没有帮助。(MainMenu.java:124) 该行仅显示 stage.act();比 st
我有一堆 Tomcat 8.0.15、Apache 2.2.29 和 mod_jk 1.2.40 (win2003 serv) 在 http 响应状态文本中,我得到 “200 ACT”。不是标准的 h
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!