以下を参考に合体させたいと考えているところ。まだnested formに対応してない。
- formをfillする
- nasted formも対応しているように見えるがcheckbox対応できてない
- backbone-railsのbackbone_datalink.jsの改良版
- これは、codebrew/backbone-rails #27でpull requestとなっているもの
- checkbox対応してる
以下を参考に合体させたいと考えているところ。まだnested formに対応してない。
$(function() { | |
_.extend(Backbone.View.prototype, { | |
formDataLink: function(model_name) { | |
var self = this; | |
var _recurse_form = function(object, objName) { | |
_.each(object, function(v,k) { | |
if (v instanceof Object) { | |
object[k] = _recurse_form(v, objName + '[' + k + '_attributes]'); | |
} else { | |
var el = self.$('[name="'+ objName + '[' + k + ']"]'); | |
// form change 2 model | |
$(el).bind('change', function() { | |
var attrs = {}; | |
if ( $(el).is("input[type='checkbox']") ) { | |
attrs[k] = $(el).prop('checked'); | |
} else { | |
attrs[k] = $(el).val(); | |
} | |
self.model.set(attrs, {silent: true}); | |
}); | |
// model change 2 form | |
self.model.bind("change:" + k, function() { | |
val = self.model.get(k) | |
if (el.is("input[type='checkbox']") && (val == true || val == false) ) | |
el.prop('checked', val); | |
return el.val(val); | |
}); | |
object[k] = el.val(); | |
} | |
}); | |
return object; | |
}; | |
// attributes initialize | |
this.model.attributes = _recurse_form(this.model.attributes, model_name); | |
} | |
}); | |
}); |