2013-05-13 94 views
0

使用内联模板,我需要让学生只是一个小名单,对我提出的联模板,使元素和附加click事件...不触发单击事件 - 而我在骨干

但我无法获得元素事件触发器和它的模型...

我该如何做到这一点?

我的代码:

define("appView", ["backbone"], function(Backbone){ 

    "use strict" 

    var appView = Backbone.View.extend({ 
     template:_.template("<li><%= name %></li>"), 
     events:{ 
      "click" : "listTrigger" 
     }, 
     initialize:function(){ 
      this.render(); 
     }, 
     render:function(){ 
      return this.template(this.model.toJSON()); 
     }, 
     listTrigger:function(){ 
      console.log("List triggered", this.model); //not working... 
     } 
    }); 

    return{ 
     getView: appView 
    } 

}) 

回答

1

你有不同的问题在这里:

  1. 视图的事件周围绑定到视图的el,但你既不填充el与HTML也不是你把视图的el进入DOM。显然你在做html = v.render(),然后将html添加到DOM。
  2. 您的模板无法使用通常的Backbone方法。你最终会以<div><li>...</li></div>作为你的HTML,这不是有效的HTML;给出无效的HTML,浏览器可能会尝试纠正它,并造成大混乱。

如果你希望你的看法是单个<li>那么你想使用tagName告诉骨干使用一个<li>,然后把刚才的内容为template

tagName: 'li', 
template: _.template('<%= name %>') 

然后你” d具有解决您的render填充this.el

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

return this是常规的,所以我补充说,到,这样做,可以让你做这样的事情:

$('ul').append(v.render().el) 

这种模式不仅是方便,但也会被人认为已经与骨干工作立即被识别。

另外,我假设,无论是使用该视图将投入实例成<ul><ol>,或者<menu>元件的那些被the only valid parents for an <li>

允许父元素

ulolmenu