Backbone.js Backbonejs:未在下划线模板中传递模型
我是backbonejs的新手。我试图做的是,在页面加载时呈现一个模板,并在Backbone.js Backbonejs:未在下划线模板中传递模型,backbone.js,underscore.js,Backbone.js,Underscore.js,我是backbonejs的新手。我试图做的是,在页面加载时呈现一个模板,并在函数中将模型作为数据参数传递给.template函数。这是我的bacbone代码: var Trip = Backbone.Model.extend({ url: '/trips/' + trip_id + '/show' }); var InviteTraveller = Backbone.View.extend({ el: '.page', render:
函数中将模型作为数据参数传递给.template
函数。这是我的bacbone代码:
var Trip = Backbone.Model.extend({
url: '/trips/' + trip_id + '/show'
});
var InviteTraveller = Backbone.View.extend({
el: '.page',
render: function () {
var that = this;
var trip = new Trip();
trip.fetch({
success: function(){
console.log(trip); //logs trip object correctly
var template = _.template($('#invite-traveller-template').html(), {trip: trip});
that.$el.html(template);
}
});
}
});
var Router = Backbone.Router.extend({
routes: {
'': 'fetchTrip'
}
});
var inviteTraveller = new InviteTraveller();
var router = new Router();
router.on('route:fetchTrip',function () {
inviteTraveller.render();
});
Backbone.history.start();
这是我的示例模板:
<script type="text/template" id="invite-traveller-template">
<h3>Trip</h3>
<h3><%= trip.get('name') %></h3>
</script>
我从昨天开始就面临这个问题,但还没有找到解决办法。不了解哪里出了问题,代码似乎也是对的。任何帮助都将不胜感激
更新:
我搬走了
inviteTravellers.render();
从
router.on()
,然后在浏览器中重新加载页面。我仍然收到相同的错误,这意味着在调用invitetraveler
视图的render()
之前正在编译
(模板)。可能的原因是什么?您正在将整个模型传递给模板。通常您会调用,然后将其结果传递给模板。另外,使用可以将工作编码为perfectfly
我认为您的问题来自另一个代码,而不是您发布的代码,因为如果删除以下内容,您的视图将无法呈现:
inviteTravellers.render();
尝试更改
我的代码似乎是正确的,但我的模板在页面加载时得到编译,我得到的trip未定义
错误。我还不明白这种行为的原因
我通过使用默认下划线模板来解决此问题。我也遇到了同样的问题(下划线v1.8.2)。我的解决方案:
var template = _.template($('#invite-traveller-template').html());
var compiled = template({trip: trip});
that.$el.html(compiled);
我尝试在trip
模型上调用toJSON()
,然后在模板中调用
。现在我在控制台中得到名称未定义。出现问题,数据未传递到模板。请尝试在success函数上设置断点,并检查trip
变量。我认为您存在范围问题,并且trip
定义不正确。您可以尝试根据向函数签名添加(模型、响应、选项)
,并使用model
来代替trip
。更改success
回调的签名以及使用model
代替trip
也不起作用:(我正在成功回调中获取数据,但无法在模板中访问它。具有type=“text/template”
阻止浏览器执行标记内的任何代码,它将被解释为文本。在render函数中放置一个断点并查看堆栈,肯定有其他东西在调用它。感谢您的帮助。我仍然收到该错误,这意味着我的脚本在render()之前被编译
被调用。可能是您的utilities.js导致了问题?不是。它没有做任何与主干相关的事情。
var template = _.template($('#invite-traveller-template').html());
var compiled = template({trip: trip});
that.$el.html(compiled);