使用引导模态的Backbone.js的看法 [英] Using bootstrap-modal as Backbone.js view
问题描述
我试图创建一个基于Twitter的引导模态,这使得通过事件
视图属性使用骨干的事件自动代表团的Backbone.js的看法。
I am attempting to create a Backbone.js view based on a Twitter bootstrap-modal, which makes use of Backbone's automatic event delegation via the events
attribute of the view.
不幸的是,自举峰似乎打破骨干网的活动代表团,因为它显示模式之前,克隆的观点HTML:
Unfortunately, bootstrap-modal seems to break Backbone's event delegation as it clones the view HTML before displaying the modal:
that.$element
.appendTo(document.body)
.show()
我的观点:
App.Views.ProjectsNav ||= {}
class App.Views.ProjectsNav.NewProjectView extends Backbone.View
events: {
'click .save': 'save',
'shown': 'shown'
}
save: (e) ->
...
false
shown: () ->
App.Helpers.Forms.setFocus($(@el), true)
false
render: () ->
$(@el).html(ich.nav_edit_project_template(@model.toJSON()))
@$('.modal').modal({'show': true, 'keyboard': true, 'backdrop': true})
@
相应的(胡子)HTML模板:
The corresponding (Mustache) HTML template:
<div class="modal hide" style="display: none; ">
<div class="modal-header">
<a href="#" class="close">×</a>
<h3>New Project</h3>
</div>
<div class="modal-body form-stacked">
<label for="name">Name</label> <input type="text" name="name" value="{{name}}"/><input type="hidden" name="lock_version" value="{{lock_version}}"/>
</div>
<div class="modal-footer">
<a href="javascript:void(0)" class="save btn primary">Create</a>
<a href="javascript:void(0)" class="cancel btn secondary">Cancel</a>
</div>
</div>
无论是保存
也不所示,当相应的事件被触发
被称为
任何想法?
推荐答案
还好吧,因此该解决方案是相当简单:
Allright, so the solution is was rather simple:
App.Views.ProjectsNav ||= {}
class App.Views.ProjectsNav.NewProjectView extends Backbone.View
tagName: 'div'
events: {
'click .save': 'save',
'click .cancel': 'hide',
'hidden': 'hidden',
'shown': 'shown'
}
initialize: (options) ->
super(options)
@collection = options.collection
hide: () ->
@el.modal(true).hide()
false
save: (e) ->
...
@model.save(attrs, {
success: (project) =>
@model = project
@collection.add(@model)
@hide()
error: (project) =>
alert('Something went wrong: ' + project)
}
)
false
render: () ->
@el = ich.nav_edit_project_template(@model.toJSON()).modal('keyboard': true, 'backdrop': true)
@delegateEvents()
@el.modal('show': true)
@
hidden: () ->
@remove()
false
shown: () ->
App.Helpers.Forms.setFocus($(@el), true)
false
总结的事情了,关键是要分裂显示模式分为两个步骤,赋予可能性分配 @el
并调用 @delegateEvents()
之后使其可见之前。 @ el.modal(真)
可用于访问该对象控制模式,例如,以编程方式将其隐藏。
Summing things up, the key is to split showing the modal into two steps giving the possibility to assign @el
and invoke @delegateEvents()
afterwards before making it visible. @el.modal(true)
can be used to get access to the object controlling the modal, e.g., to programmatically hide it.
这篇关于使用引导模态的Backbone.js的看法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!