在我的rails应用中,我在public/templates/_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);
});
但我收到了控制台错误GET http://localhost:3000/public/templates/hero-1 404 (Not Found)
答案 0 :(得分:1)
快速回答/相关SO答案:Rendering partial in js.erb file
更长的答案:有几种方法可以做到这一点。你可以尝试:
newTemplateContainer.load("<%= 'render partial: public/templates/hero-1' %>");
不正面会起作用。这对我来说很烦人,也让你有高度耦合的代码。如果该模板的名称发生更改,则必须在n个位置更新它。
我将解耦JS并在config/routes.rb
中创建一个内部端点;例如:
get templates/:id
然后,
class TemplatesController < ApplicationController
def show
@template = Template.find(params[:id])
end
end
然后在点击处理程序的JS里面你可以:
$.get('/templates/hero-1', function(data) {
// do stuff with returned data
$('.js-Canvas').html(data)
});
非常简单,但更多的是尝试勾勒出一种不同的方法。这似乎也是handlebars可以帮助的东西。