Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax加载静态Rails部分_Javascript_Jquery_Ruby On Rails - Fatal编程技术网

Javascript Ajax加载静态Rails部分

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

在我的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
    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)
});