class Locmare.FormModule.Field extends Backbone.View tagName: 'div' className: 'field' initialize: (options) -> @form = options.form @field_name = options.field_name @field_manifest = options.field_manifest @label = Locmare.FormModule.FieldModule.LabelFactory.factory this, @field_manifest.label @tag = Locmare.FormModule.FieldModule.TagFactory.factory this, @field_manifest.tag @helpers = new Locmare.FormModule.FieldModule.Helpers({field: this, field_manifest: @field_manifest}) @rb = @row_break() @options = {'data-model': @field_manifest.form_name} @on('change', @change) item = @item() @listenTo(item, 'resize', @refresh) @listenTo(item, 'move', @refresh) render: () -> this.$el.html('') this.$el.append(@label.render().el) if not @label.hidden() this.$el.append(@tag.render().el) this.$el.append(@helpers.render().el) this refresh: () -> @tag.render() @helpers.render() change: () -> @set(@val(), {silent: true}) @item().trigger('input:' + @field_name) @item().trigger('input') mounted: () -> if @form.mounted 0 else 1 mount_option: () -> {'mount': @mounted()} item: () -> @form.item val: () -> @tag.val() value: () -> @item().get(@field_manifest.column_name()) set: (v, opt = null) -> a = {} a[@field_manifest.column_name()] = v @item().set(a, opt) options: (tag_options = {}) -> tag_options form_field_name: () -> @form.form_field_name @field_name form_name: () -> @form.form_name row_break: () -> if @field_manifest.row_break new Tag.RowBreak() else null class Locmare.FormModule.FieldModule class Locmare.FormModule.FieldModule.Helpers extends Backbone.View tagName: 'span' initialize: (options) -> @field = options.field @field_manifest = options.field_manifest @helpers = {} _.each @field_manifest.helpers, (helper_manifest, helper_name) => @helpers[helper_name] = Locmare.FormModule.FieldModule.HelperFactory.factory(@field, helper_manifest) render: () -> this.$el.html('') _.each @helpers, (helper) => this.$el.append(helper.render().el) this