Place中的占位符使用Backbone Collection

时间:2012-08-07 18:51:39

标签: backbone.js

我有一个通过Backbone Collection填充的选择框:

class Prog.Views.History extends Backbone.View

  template: JST['backbone/templates/shapes/history']
  tagName: "option"


  initialize: ->
    @model.bind('change:formatted', @render, this);

  render: ->
   $(@el).html(@template(history: @model))
   this

骨干/模板/形状/历史

<option value="<%=history.get('origin')%>"><%=history.get('origin')%></option>

这很好用,所有正确的数据都显示在选择框中,但我想要的是第一个选项是“请选择”即占位符......我想要注入一个名为“占位符”的记录进入收藏,但它似乎是一个圆的方式。

这就是我所说的:

  appdenDropdown: (history) ->
    console.log("append trigger")
    view = new Prog.Views.History(model: history)
    $('select#history').append(view.render().el)

我该如何默认?

1 个答案:

答案 0 :(得分:1)

首先我不认为这个实现是正确的,我认为渲染的结果将是这样的:

<option><option value="the_origin">the_origin</option></option>

注意双重选项

正确的解决方案可能是:

class Prog.Views.History extends Backbone.View
  tagName: "option"

  initialize: ->
    @model.bind('change:formatted', @render, this);

  render: ->
    $(@el).attr( "value", this.get( "origin" ) )
    $(@el).html( this.get("origin") )
    this

这里不需要模板。

关于包含“请选择”选项

在HTML中直接将“请选择”选项元素硬编码到选择元素中。

然后不使用this.$el.html()填充选择this.$el.append(),这将尊重实际的默认选项,它将添加动态元素在它之后。

更新

例如,如果 select元素如下所示:

<select id="history"></select>

让它看起来像这样:

<select id="history">
  <option value="0" selected="selected">Please select...</option>
</select>

当您使用append添加动态选项元素时,占位符选项元素将保留。