Javascript Ajax加载静态Rails部分
在我的rails应用程序中,我有一个html模板位于Javascript Ajax加载静态Rails部分,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,在我的rails应用程序中,我有一个html模板位于public/templates/\u hero-1.html.erb 在application.js.erb文件中,我试图在渲染整个div之前,将该模板加载到动态创建的div中 // Append component to text editor when clicked $('.js-TemplateThumbnail').click(function() { // Define new template container
public/templates/\u hero-1.html.erb
在application.js.erb文件中,我试图在渲染整个div
之前,将该模板加载到动态创建的div
中
// Append component to text editor when clicked
$('.js-TemplateThumbnail').click(function() {
// Define new template container
var newTemplateContainer = $('<div class="position-relative hideChild js-TemplateContainer">');
// Insert selected template into new template container
newTemplateContainer.load("<%= 'public/templates/hero-1' %>");
// Build new template
$('.js-Canvas .js-TemplateContainer').last().after(newTemplateContainer);
});
//单击时将组件附加到文本编辑器
$('.js TemplateThumbnail')。单击(函数(){
//定义新模板容器
var newTemplateContainer=$('');
//将所选模板插入新模板容器
newTemplateContainer.load(“”);
//构建新模板
$('.js Canvas.js TemplateContainer').last().after(newTemplateContainer);
});
但是我得到一个控制台错误
GEThttp://localhost:3000/public/templates/hero-404(未找到)
快速回答/相关SO回答:
详细回答:有两种方法可以做到这一点。你可以试试:
newTemplateContainer.load(“”)代码>
这不一定行得通。这让我感觉很不舒服,同时也给您留下了高度耦合的代码。如果该模板的名称发生更改,则必须在n个位置对其进行更新
我将解耦JS并在config/routes.rb
中创建一个内部端点;例如:
获取模板/:id
那么
class TemplatesController < ApplicationController
def show
@template = Template.find(params[:id])
end
end
非常简单,但更重要的是试图勾勒出一种不同的方法。这似乎也有帮助。您需要从Web服务器加载它……因此,您需要提供一个路由和一个专用操作,以使用partial完成相同的操作。谢谢!请记住,我将有数百个这样的模板,它们不是单独的页面,它们只是组成页面的小模板。所以这就是为什么我希望避免控制器等。在Rails中很难避免控制器!;)或者任何MVC框架。我想我不能100%确定你想要完成什么。即使在erb中构建一个模板,然后将相关数据从控制器传递到该模板,这样你就不会实际创建hero-1….hero-100
等。以下是一些模板,我只想将它们放在这样的文件夹中,然后在动态构建的文件中加载相关的文件。
$.get('/templates/hero-1', function(data) {
// do stuff with returned data
$('.js-Canvas').html(data)
});