使用带 Backbone.js 的把手

uqxowvwt  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(177)

我正在学习 Backbone /车把/要求。我已经看了所有的在线和对SO -有没有任何教程或网站,你可以指导我,将提供有用的信息,使用使用车把,而不是下划线?

cigdeys3

cigdeys31#

使用handlebars.js而不是underscore模板非常简单。
https://cdnjs.com/libraries/backbone.js/tutorials/what-is-a-view(滚动到“加载模板”部分)

SearchView = Backbone.View.extend({
    initialize: function(){
        this.render();
    },
    render: function(){
        // Compile the template using underscore
        var template = _.template( $("#search_template").html(), {} );
        // Load the compiled HTML into the Backbone "el"
        this.el.html( template );
    }
});

基本上,backbone的惯例是在一个render函数中构建html。模板引擎的使用完全由你决定(我喜欢Backbone的这一点)。所以你只需将它改为:

SearchView = Backbone.View.extend({
    initialize: function(){
        this.render();
    },
    render: function(){
        // Compile the template using Handlebars
        var template = Handlebars.compile( $("#search_template").html() );
        // Load the compiled HTML into the Backbone "el"
        this.el.html( template );
    }
});

因为你使用的是require.js,所以你可以在模块的顶部把Handlebars作为一个依赖项。我对这个还很陌生,但是听起来你应该把重点放在学习Backbone.js模式和require.js的用法上。

oyt4ldly

oyt4ldly2#

我更喜欢编译一次模板(在初始化期间),这样就避免了每次渲染都要重新编译模板。另外,为了生成HTML,您需要将模型传递给编译后的模板:

SearchView = Backbone.View.extend({
  initialize: function(){
    // Compile the template just once
    this.template = Handlebars.compile($("#search_template").html());
    this.render();
  },
  render: function(){
    // Render the HTML from the template
    this.$el.html(this.template(this.model.toJSON()));
    return this;
  }
});
rkttyhzu

rkttyhzu3#

如果您使用require.js,您将无法使用当前的Handlebars文件。我使用了下面的Handlebars Plugin,它似乎是最新的当前版本。如果Handlebars在您的模块中返回空值,只需用上面的插件替换您的Handlebars文件。

gj3fmq9x

gj3fmq9x4#

define(["app", "handlebars",
    "text!apps/templates/menu.tpl"
], function (app, Handlebars, template) {

    return {
        index: Marionette.ItemView.extend({
            template: Handlebars.compile(template),
            events: {
                'click .admin-menu-ref': 'goToMenuItem'
            },
            goToMenuItem: function (e) {
               //......
            }
        })
    }
});

 new view.index({model: models});

相关问题