使用Backbone和Handlebar连续制作带有HTML的表格?

时间:2018-08-16 18:27:01

标签: ruby-on-rails backbone.js handlebars.js

我有一个使用Backbone的Ruby on Rails应用程序。在咖啡中,我有:

class App.Views.TableElement extends Backbone.View
  events:
    "change input[name='past_results']": "togglePastResults",
    "change .cohort_toggle select": "selectCohort"

  initialize: (options) ->
    @listenTo(@model, "change", @render)

  render: =>
    console.log @model.toJSON()
    @$el.empty().append(HandlebarsTemplates['shared/table_element'](@model.toJSON(), data: { tableClass: @tableClass() }))
    @$el.find('.cohort_toggle select').val(@model.get("selectedCohortLabel"))
    @$el

我认为这是相关的。

我不会展示整个model.toJSON输出,但是它具有标题和行,就像表格一样。行之一中的元素之一应该是链接。最终,我认为这将是指向我认为的javascript的链接,但就目前而言,我只想链接至google以进行测试...因此,我将元素硬编码为'<a href="https://google.com">Visit google</a>',但是,{ {1}}和其他内容,因此HTML才是表格中实际显示的内容。

问题是:谁在逃避我的HTML,如何停止它?

模型(部分):

&lt

模板。所有这些都是因为我不确定它的作用是什么...所以它有模型摘录所没有的列:

class App.Table extends Backbone.Model
  defaults: {
    showPastResults: true
  }

  initialize: ->
    @set("selectedCohortLabel", @get("cohortLabels")[0])


  columns: =>
    columns = []
    Array::push.apply columns, [@get('categories')]
    Array::push.apply columns, @get('currentData')

    Array::push.apply columns, [['<a href="https://google.com">Visit google</a>', 5, 5]]    if @get('haveDataBytes')
    columns

1 个答案:

答案 0 :(得分:1)

来自fine manual

  

HTML转义
  把手{{expression}}返回的HTML转义值。如果您不希望手把转义一个值,请使用“三重隐藏” {{{

大概您的columns数据进入某个地方的模型的toJSON返回值中。您的模板需要某种方式来知道何时处理链接,以便它可以说{{{link}}}而不是{{link}}来防止{{...}}逃脱HTML。


此外,您可以这样编写columns方法:

columns: ->
  columns = [ @get('categories'), @get('currentData')... ]
  if @get('haveDataBytes')
    columns.push ['<a href="https://google.com">Visit google</a>', 5, 5]
  columns

避免使用Array的原型的奇怪和非惯用性。