在骨干中插入静态菜单

时间:2012-10-10 10:37:05

标签: html backbone.js menu

我必须在html中插入一个硬编码的简单菜单,但我不知道我应该在哪里插入它。 我应该直接在路由器中添加html代码吗?怎么样?

2 个答案:

答案 0 :(得分:2)

不,你不应该使用路由器,你应该在Backbone.View对象中进行,这是一种应该创建HTML并添加它的对象。

没有模板的简单方法

 var view = Backbone.View.extend({
   .
   .   other backbone stuff
   .

   ,menu: '<div> menu </div>'

   ,render: function(){
      var compiledHTML= $(this.menu);
      $('selector').append(compiledHTML);
   }

 });

更简单的模板方式

使用HTML页面中插入的HTML菜单

              
     。      。你的HTML代码      

 .
 . end of your html code
 .

<script type="text/template" id="marker_small_info_template">
   <div> xxx </div>
</script>

</body> 

然后在Backbone中使用Jquery将其包装并将其添加到所需位置的页面中。

 var view = Backbone.View.extend({

    ,render: function(){
      var compiledHTML= _.template( $("#marker_small_info_template").html());
      $('selector').append(compiledHTML);
      return this;
   }

 });

这样做的复杂而奇特的方式(require.js + templates)

将HTML代码作为模板(例如Underscore.template)放在一个单独的文件中,然后使用Require.JS在Backbone.View中“编译”它以便为我获取它,并使用JQuery来包装和加上它。

define([  
  'text!templates/menuFrenteItem.html'
],
function (templateMenuItem) {

   return Backbone.View.extend({
  .
  .
  .
  ,smallInfo: function(variables){ return _.template(templateMenuItem, variables)}

  ,render: function(){
     var compiledHTML = $(this.smallInfo(dataToCompileTemplate));
     $('selector').append(compiledHTML);
     return this;
  }

}

我认为这是学习在Javascript中使用模板并将此工具添加到腰带的好机会。

答案 1 :(得分:0)

您应该使用Backbone视图,并让路由器呈现它:

http://jsfiddle.net/rd13/g3U7j/11/

var MyView = Backbone.View.extend({
    el: '.container',
    template: "<menu><li>Item</li></menu>",
    render: function() {
        this.el.innerHTML = this.template;
        return this;
    }
});

var r = Backbone.Router.extend({
    routes: {
        '': 'default'
    },
    default: function() {
        new MyView().render();
    }                
});

var router = new r();
Backbone.history.start();​