私はBackbone.jsがアーキテクチャの主要部分であるSPAアプリケーションを開発しています。
また、いくつかのTwitter Bootstrapフレーバーがあり、その中にButtonグループがあります[1]。したがって、htmlには、チェックボックスまたはラジオとして機能するこれらのボタンがあります。
Backbone.ModelBinder [2]を使用して、これらのボタンを含むBackboneビューにBackboneモデルを透過的にバインドするために、次のコードをハックアウトしました。
# Twitter Bootstrap compatibility
addButtonGroupModelBindingSupport = ->
$(@el).one 'mousedown keydown', '.btn-group[data-toggle="buttons-radio"] button', ->
$(@).closest('.btn-group').find('button').prop 'type', 'radio'
installTwitterBootstrapModelBindingSupport = ->
backboneView = Backbone.View
ButtonGroupModelBinderSupportView = Backbone.View.extend
constructor: ->
backboneView.apply @, arguments
addButtonGroupModelBindingSupport.call @
return
Backbone.View = ButtonGroupModelBinderSupportView
installTwitterBootstrapModelBindingSupport()
このコードは、ModelBinderをエクスポートするモジュールの内部にあるため、1回だけ実行されます。Backbone.Viewで必要な動作をミックスインして、目立たない方法で疑わしいJavaScriptが挿入されるようにします。
だから私はそれらのボタンにもうボタンではないことを伝えています。私が知る限り、ChromeFirefoxとIEはそれで大丈夫です。
だまされて、ModelBinderはそのボタンをチェックボックスまたはラジオとして適切に処理し、すべてが必要に応じて機能します。
このハックがあまりにもトリッキーだと思われる場合は、経験豊富なフロントエンド開発者から話を聞くのは素晴らしいことです。
[1] http://twitter.github.com/bootstrap/components.html#buttonGroups