Ruby on rails 如何禁用主干代码以在非必需页面中调用下划线模板?

Ruby on rails 如何禁用主干代码以在非必需页面中调用下划线模板?,ruby-on-rails,templates,backbone.js,underscore.js,Ruby On Rails,Templates,Backbone.js,Underscore.js,我有一个应用程序,客户端使用主干,后端使用Rails 我的主干代码以以下方式调用下划线模板: var todo = Backbone.View.extend({ . template : _.template( $('#todo_rows').html() ), . } 然而,站点上只有一个页面需要调用此模板,并且主干js在每个页面上加载。这意味着在没有定义“#todo_行”下划线模板的其他页面上将出现JS错误 一种解决方案是为所有其他页面创建一个空白的“#todo_r

我有一个应用程序,客户端使用主干,后端使用Rails

我的主干代码以以下方式调用下划线模板:

var todo = Backbone.View.extend({
    .
    template : _.template( $('#todo_rows').html() ),
    .
}
然而,站点上只有一个页面需要调用此模板,并且主干js在每个页面上加载。这意味着在没有定义“#todo_行”下划线模板的其他页面上将出现JS错误

一种解决方案是为所有其他页面创建一个空白的“#todo_rows”模板部分,但这对我来说是一个重大缺陷,并不是解决此问题的最佳方法


禁用代码以调用主干中的模板的最佳方法是什么?如果您不在主页上或未登录,则需要禁用它。

下划线的
模板
很乐意接收空字符串作为参数。由于
$('#todo_rows').html()
返回
null
如果
#todo_rows
元素不存在,您可以使用or运算符习惯用法轻松避免JS错误:

template : _.template( $('#todo_rows').html() || '' ),
这意味着“如果真实的字符串不可用,则使用空字符串作为伪模板”

针对这个问题的另一个Rails特定的解决方法(通常是一种简洁的方法)是将
ejs
gem添加到项目的gem文件中,它允许您将每个模板放在
app/assets
中单独的
.jst.ejs
文件中,并让资产管道将其编译为
jst
对象,您的视图可以访问该对象以获取模板内容:

模板/todo_rows.jst.ejs

<% // Your template (content of former "#todo_rows") here %>
//= require templates/todo_rows

var todo = Backbone.View.extend({
    template : _.template(JST['templates/todo_rows']),
    // ...
}

这避免了到DOM的往返,并且可以很好地将模板组织到多个文件中,但是有一个缺点,即模板字符串将作为包含它的每个页面的JavaScript代码的一部分发送

谢谢,我同意你的第一个建议,使用or操作符。