在使用 _.template 从 Backbone.js 传入值后,我目前正在渲染 Jade 模板。我可以访问直接呈现为的任何内容:
// Jade
{{ variable }}
但我无法使用以下方式访问它:
// Jade
each item in variable
// exception: variable is not defined
因此,例如在下面的代码中,我试图发送一个资源对象,我可以使用每个对象进行迭代,但我似乎根本无法访问它,除非它被标记为{{资源}},但我可以似乎没有在 Jade 中对它进行迭代。
骨干.js:
render: function() {
this.$el.append( this.todoTpl({
// data
resources: this.collection.data.attributes.resources,
})
);
return this;
}
玉:
if(typeof resources !== "undefined")
each key, value in resources
div.dev
p= value
p= key
它从不显示任何东西。如果我使用 {{ resources }},我可以将 [Object, Object] 渲染到 HTML。
我尝试过使用 locals.resources 等,但我似乎无法确定这一点,而且它似乎应该是愚蠢而简单的。
TL;DR:我如何设置一个变量,以便 Jade 方法可以访问它,而不仅仅是由 {{ variable }} 呈现为文本?
谢谢!
更新: 为我的收藏发布附加代码:
var ProjectDataCollection = Backbone.Collection.extend({
defaults: {
versionOne: "",
eCM: "",
bugzilla: "",
teamCity: "",
appData: "",
data: "",
},
model: ProjectModel,
url: '/data',
initialize: function(models, options) {
var id = options.id || [];
if (id > 0) {
this.fetchData(id);
}
console.log("A new collection has been created.");
},
fetchData: function(id) {
// Save a reference to the existing url
var baseUrl = this.url;
// Assign our batch url to the 'url' property and call the server
this.url += '/' + id;
this.fetch({
success: function(collection, response) {
collection.appData = new AppData(response.details);
collection.bugzilla = new Bugzilla(response.apis.bugzilla);
collection.versionone = new VersionOne(response.apis.versionone);
collection.trigger('change');
},
error: function() {
console.log("fail");
}
});
// Restore the 'url' property
this.url = baseUrl;
}
});
我避免发布所有这些主要是为了让我的问题保持简单。如果我遗漏了太多内容,我深表歉意!我也知道由于我对 Backbone 的经验不足,我在这里做了一些可怕的事情 :)
更新解决方案:
回答几个问题:我正在使用 Jade 和 Underscore,因为用于 HTML 的 Jade 模板既美观又简洁。Backbone 使用 Underscore 将数据传递到我用 Jade 渲染的 JS 模板中。虽然我没有看到很多人在网上这样做,但在一些帖子中,其他人更喜欢这种安排。
user1737909 的评论帮助我找到了解决方案。使用 _.template 时,我将覆盖传递给 templateSettings 全局以利用 {{ }} 进行插值(我使用过的另一个模板引擎的保留)。下划线将以这种方式打印出直接值,但它不会处理脚本,例如:
{{ _.each(list, function() {} }}
一旦我删除了我的覆盖设置:
<% _.each(list, function() {} %>
很高兴并且工作完美。虽然使用两个模板引擎似乎很奇怪,但我不得不说 Jade 非常好,享受它的语法仍然值得:)
感谢您的反馈!