我有一个Rails应用程序,它使用骨干和coffeescript来使界面更好。但是,我遇到了一些问题。我怀疑问题是竞争条件。最好使用代码段进一步澄清。
以下是我的coffeescript代码片段:
class VGStream.Views.Scenarios.TypeWellScheduleForm extends VGStream.Views.Base.AjaxForm
className: 'schedule-form'
template: JST['backbone/templates/scenarios/type_well_schedule_form']
initialize: (options) ->
super
@typeWells = options.typeWells
render: ->
@$el.html @template @
@$('.well_type').val @model.get('scheduleable_type')
@setWellSelection()
@$('.well_id').val @model.get('scheduleable_id')
@$('.exclude').val if @model.get 'exclude' then 1 else 0
@calculateNetAcreage()
@
setWellSelection: ->
if @$('.well_type').val() == 'TypeWell'
wells = @typeWells.computed
else
wells = @typeWells.imported
wellSelect = @$('.well_id')
wellSelect.empty()
for well in wells.models
wellOption = $ '<option>',
value: well.get 'id'
text: well.get 'name'
wellSelect.append wellOption
从函数定义中可以看到,setWellSelection函数会填充下拉选择框的选项。它有近1000个选项。我同意我不应该在下拉选项中允许尽可能多的选项,但这是我想要争取的战斗。
此代码在我的本地计算机上运行良好,因为localhost上没有网络延迟。显示下拉列表选项没有任何问题。但是,在网络上,部署在Heroku上的应用程序,在我点击下拉列表然后显示之前,下拉列表不会显示。加载后,一切正常。
我想做的是以某种方式使setWellSelection调用同步,以便在执行渲染函数的其余部分并显示模板之前,它有机会填充下拉选择框。
我不知道该怎么做。
答案 0 :(得分:0)
您可以修改从模板返回的html,然后再将其渲染到屏幕上。
您可以直接修改html,因为它只是字符串。通过这种方式,您将拥有一个不错的性能解决方案,但维护起来会非常困难。
另一种方法是将html字符串转换为jquery对象并修改它,我认为这是一种更好的方法,即使它可能很慢。稍后您可以从jquery对象中获取更新的html并渲染到屏幕。