From 81d481d893aa1f2db09fd9001dc8188db7964507 Mon Sep 17 00:00:00 2001 From: Erik Escobedo Date: Thu, 31 Jan 2013 15:21:26 -0600 Subject: [PATCH] Boolean attributes now sync properly for radio buttons and checkboxes. Checkable inputs need the property "checked" to be settled to true/false instead of the "value" attribute. --- vendor/assets/javascripts/backbone_datalink.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/vendor/assets/javascripts/backbone_datalink.js b/vendor/assets/javascripts/backbone_datalink.js index 15683c6..fc02556 100644 --- a/vendor/assets/javascripts/backbone_datalink.js +++ b/vendor/assets/javascripts/backbone_datalink.js @@ -1,4 +1,7 @@ (function($) { + $.fn.isCheckable = function() { + return ["checkbox", "radio"].indexOf(this.attr("type")) >= 0; + }; return $.extend($.fn, { backboneLink: function(model) { return $(this).find(":input").each(function() { @@ -6,13 +9,21 @@ el = $(this); name = el.attr("name"); model.bind("change:" + name, function() { - return el.val(model.get(name)); + if (el.isCheckable()) { + return el.prop("checked", model.get(name)); + } else { + return el.val(model.get(name)); + } }); return $(this).bind("change", function() { var attrs; el = $(this); attrs = {}; - attrs[el.attr("name")] = el.val(); + if (el.isCheckable()) { + attrs[el.attr("name")] = el.is(":checked"); + } else { + attrs[el.attr("name")] = el.val(); + } return model.set(attrs); }); });