我正在使用_.template从Backbone.js传递值后呈现Jade模板。我可以直接访问任何呈现的内容:
// Jade
{{ variable }}
但我无法使用以下方式访问它:
// Jade
each item in variable
// exception: variable is not defined
因此,例如在下面的代码中,我试图发送一个资源对象,我可以使用每个迭代,但我似乎无法访问它,除非它被标记为{{resources}},但是然后我似乎无法用Jade中的每一个迭代它。
Backbone.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全局,以便使用{{}}进行插值(从我使用过的另一个模板引擎中保留)。 Underscore将以这种方式打印出直接值,但它不会处理脚本,例如:
{{ _.each(list, function() {} }}
删除覆盖设置后:
<% _.each(list, function() {} %>
很开心,工作得很完美。虽然使用两个模板引擎似乎很奇怪,我不得不说Jade非常好,但仍然值得欣赏它的语法:)
感谢您的反馈!
答案 0 :(得分:1)
玉插值是#{var}
,而不是{{ var }}
,所以我猜你不是把你的变量传递给Jade而是传递给别的东西(比如把手甚至角或其他东西)