Backbone.js 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:

我是backbonejs的新手。我试图做的是,在页面加载时呈现一个模板,并在
函数中将模型作为数据参数传递给.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);