我有一个通过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)
我该如何默认?
答案 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
添加动态选项元素时,占位符选项元素将保留。