gpt4 book ai didi

javascript - 渲染多杯咖啡的模式

转载 作者:数据小太阳 更新时间:2023-10-29 05:35:08 25 4
gpt4 key购买 nike

我有一个 task 模型,它与 userproject 模型相关。

当我创建/更新任务时,我需要在异步 View 中进行更新,不仅是任务更改/添加,还包括项目和用户信息(因为其中一些数据也可能更改)。

我在 Controller 中有这个:

def create
@task = Task.new(params[:task])
@project = Project.find(params[:project_id])

respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render json: @task, status: :created, location: @task }
else
format.html { render action: "new" }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end

还有我的任务/create.js.coffee

# Update task table
$('#mytable').append("<%= j render(partial: 'tasks/task', locals: { t: @task }) %>")

# Update user data
$('.user-data').html("<%= j render(partial: 'users/user_widget', locals: { u: current_user }) %>")

# Update project data
$('.project-data').html("<%= j render(partial: 'projects/project_widget', locals: { p: @project }) %>")

而且效果很好。我看到 2 个问题:

  • 在我添加的 .js.coffee 的每个渲染中,我重复了太多的代码。我复制完全相同的代码来更新项目和用户数据、任务更新、任务销毁,我会对可能影响用户和项目的新模型执行相同的操作

  • 在 tasks/create.js.coffee 中处理项目和用户数据似乎很奇怪

因此,我正在寻找一种更好的模式来处理这些东西,有什么想法吗?

编辑(澄清):我认为实现这样的事情会更好:

tasks/create.js.coffee

# Update task table
$('#mytable').append("<%= j render(partial: 'tasks/task', locals: { t: @task }) %>")

UserData.refresh()
ProjectData.refresh()

但是,我不能那样做,因为我每次都需要渲染部分,所以我必须做一些奇怪的事情,比如将 html 部分传递给那些 refresh() 函数,并且它将与以前的方式完全相同。这只是我想到的一种方式,但我想听听您的想法。

最佳答案

您可以呈现属于不同 Controller 的模板/操作。因此,您可以保留 tasks/create.js.coffee 文件以及所有其他使用相同代码的 Controller 操作(如用户和项目),在您将使用的 respond_to block 中:

format.json { render 'tasks/create' }

您甚至可以渲染特定文件:

format.json { render file: "path/to/specific/file" }

这里有一个链接,其中包含有关在 rails 中渲染的更多信息:http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-an-action-s-template-from-another-controller

关于javascript - 渲染多杯咖啡的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41245078/

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