模板不加载在Backbone.js的应用程序 - 内置使用约曼(Template not loadi

2019-07-31 20:20发布

我在我看来使用.ejs模板。 但由于某些原因的看法不会加载指定的模板。 它返回undefined。 下面的代码:

sandplate2.applicationView = Backbone.View.extend({
    el: 'div',

  template: _.template($("appl.ejs").html()),

  initialize: function(){
    console.log("Application view initialize");

    _.bindAll(this, "render");

    this.render();
  },

  render: function(){
    console.log("Application view rendering");
    this.$el.html(this.template());
    return this;
  }
});

我一定要配置别的东西,以加载模板?

我用约曼结构我的应用程序。 我用了init和骨干发电机。

仅供参考 - 我试图加载模板被加载在使用脚本元素中的index.html。

Answer 1:

如果你建造它使用约曼,看看app.js看到,如果你正在使用Backbone.LayoutManager 。 您可能需要更改配置那里EJS工作。 默认情况下,我认为它应该被期待下划线的模板。

我使用的把手 ,我更新了我的app.js看起来像这样:

Backbone.LayoutManager.configure({
  manage: true,

  paths: {
    layout: "templates/layouts/",
    template: "templates/"
  },

  fetch: function(path) {
    path = path + ".html";

    if (!JST[path]) {
      $.ajax({ url: app.root + path, async: false }).then(function(contents) {
        JST[path] = Handlebars.compile(contents);
      });
    }

    return JST[path];
  }
});

我还添加把手到模块的定义()调用,通过在“把手”作为参考。 您可能需要做EJS类似的东西。



Answer 2:

请尝试最新骨干genearator与自耕农1.0beta。 我们已经取得了很多关于它的改进,包括预编译EJS模板 。 你不想担心模板,自耕农将预编译并加载它。

对于输入视样品生成的代码在下文提供。

Todo.Views.InputView = Backbone.View.extend({

    template: JST['app/scripts/templates/input.ejs'],

    render: function(){
       $(this.el).html(this.template());
    }

});


Answer 3:

抛开惯例,它看起来像这个问题简直是你的jQuery查找。

_.template($("appl.ejs")...

$('appl.ejs')不是一个有效的DOM选择,除非你在你的index.html有一个这样的元素

<appl class="ejs"></appl>

如果你正在尝试的目标与jQuery你的模板,给它一个ID或东西的jQuery可以找到像这样:

<script type="text/template" id="appl">
    <div></div><!-- template html here -->
</script>

    // later...
    $('#appl').html()
    // will get your template html

然而,正如其他人所提到的,在一个自耕农和require.js工作流程,你可以问require.js为文本,您将获取模板并创建一个下划线模板之前把它周围的一个变量。



文章来源: Template not loading in a Backbone.js app - built using Yeoman