【问题标题】:undefined variable when rendering underscore template data in backbone在主干中渲染下划线模板数据时未定义的变量
【发布时间】:2014-10-20 17:06:10
【问题描述】:

我正在使用带有下划线模板的主干,但在获取下划线以呈现我传递给模板的数据时遇到问题。这是我的代码:

define([
  'jquery',
  'underscore',
  'backbone',
  'models/home/HomeModel',
  'text!/app/templates/home/homeTemplate.html'
], function($, _, Backbone,HomeModel,homeTemplate){

  var HomeView = Backbone.View.extend({
    el: $("#page"),

    initialize: function(){
      var self = this;
      self.model = new HomeModel();
    },

    render: function(){
      var homeTitle = this.model.get('title');
      var homeData = {
        title: homeTitle
      }

      var compiledTemplate = _.template( homeTemplate, homeData );
      this.$el.html(compiledTemplate);

    }

  });

  return HomeView;

});

在这段代码中,我可以一直到 var homeData = {} 对象,其中包括来自模型的正确标题,但是当我创建compiledTemplate 时,我收到一个错误,提示标题未定义。

有什么想法我在这里做错了吗?

【问题讨论】:

标签: javascript templates backbone.js underscore.js underscore.js-templating


【解决方案1】:

来自Underscore.js documentation

var compiled = _.template("hello: ");

编译({name: 'moe'});

=>“你好:萌”

您似乎没有正确使用_.template 方法。它返回一个编译后的模板函数,您可以调用它来渲染数据:

var compiledTemplate = _.template( homeTemplate, homeData );
this.$el.html( compiledTemplate( homeData ) );

【讨论】:

  • 您可以选择同时传递模板和数据,并使用同一个调用进行渲染。
  • 那么模型上的“title”一定是未定义的。
  • @kinakuta:从 Underscore 1.7 开始,两步过程现在是强制性的:stackoverflow.com/a/25881231/479863
  • 我想你想说var compiledTemplate = _.template( homeTemplate );(即没有第二个参数)只是为了确保homeData中的任何内容都不会与任何_.template选项冲突。
  • @muistooshort 呃,我明白了。现在我必须重构旧代码,这样如果下划线更新,事情就不会中断。
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多