0

我正在尝试从 Backbone 视图中使用 D3 渲染事物。但是,我的事件没有触发,我认为这是因为我正在渲染以响应侦听由我的模型触发的事件。

class TableView extends Backbone.View
  el : 'body'
  tableId : ''
  columns : ''
  thead : ''
  tbody : ''
  input : ''
  rows : ''
  inputId : ''

  initialize:()->
    @model.bind "render", @render 
    @tableId = "resultsTable#{@options.id}"
    @inputId = "filterInput#{@options.id}"
    @columns = @options.columns
    @el = 'body'
  destroy:()->
    @undelegateEvents()

  render:()=>
    @table =  d3.select(@el).append("table").attr("id",@tableId)
    .attr("class","visualization-panel")
    @thead = @table.append("thead")
    @tbody = @table.append("tbody")
    @input = @table
      .append("input")
      .attr("id",@inputId)
    @thead
      .append("tr")
      .selectAll("th")
      .data(@columns)
      .enter()
      .append("th")
      .text((col)->return col)
      .attr("class","col-heading")
    @tbody
      .selectAll("tr")
      .attr("class","spacing center-text")
    @_renderTableBody()

  _renderTableBody:()=>
    @rows = @tbody
      .selectAll("tr")
      .data(@model.data.models)
      .enter()
      .append("tr")
    @rows
      .selectAll("td")
      .data((model)=> return @columns.map((column)=> return {column : column, val : model.get(column)}))
      .enter()
      .append("td")
      .text((d)=>
        for column in @columns
          if d.column == column
            return d.val
        )
  sort:()=>
    console.log "what was clicked"
    console.log @
  test:()=>
    console.log "please console"
  events : 
    "click .col-heading" : "sort"
    "click #filterInput0" : "test"

为什么这些事件没有触发?我如何让它们着火?我知道他们没有触发,因为控制台日志没有触发。

4

0 回答 0