Skip to content
29 changes: 28 additions & 1 deletion modules/FormView.js
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,11 @@
var attr = $(element).data('model'),
options = self.__getFieldOptions(attr),
fieldBinding = self.__generateModelFieldBinding(attr, options);

//add select options
if ($(element).is('select')) {
fieldBinding.selectOptions = self.__generateSelectOptions(element, options);
}
self.bindings['[data-model="' + attr + '"]'] = fieldBinding;
});
},
Expand All @@ -230,7 +235,7 @@
/**
* @method __generateModelFieldBinding
* @param field {String} A specific model field
* @param options {Object} Additional heavior options for the bindings
* @param options {Object} Additional behavior options for the bindings
* @param [options.modelFormat] {Object} The function called before setting model values
* @param [options.viewFormat] {Object} The function called before setting view values
* @private
Expand All @@ -253,6 +258,28 @@
return options.viewFormat ? options.viewFormat.apply(this, params) : value;
}
};
},

/**
* @method __generateSelectOptions
* @param element {Element} The select element to generate options for
* @param opts {Object} Additional behavior options for the bindings
* @param [opts.modelFormat] {Object} The function called before setting model values
* @private
* @return {<Stickit select options hash>}
*/
__generateSelectOptions: function(element, opts) {
var collection = [],
options = $(element).children('option');

_.each(options, function(option) {
collection.push({'label': $(option).text(),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

last question. This all looks good, but I'm a little worried about blowing away your select options if they have different classes/attributes that you had added before. Will you lose classes?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just tested this- you will lose classes on the select options. You won't lose data on the actual select though. There might be a clever way to get around this with the 'classes' bindings available in stickit - I will think about it some more.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There doesn't seem to be a way to keep your classes while binding select options using selectOptions - any ideas?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ccpowers, I think you should merge this. Though, let's create an enhancement to keep classes on two-way bound select options.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ccpowers, do you want to keep working on this or should I take over?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kentmw I'm happy to finish it but i'm about to leave the country for a month so if you want it done before October, you should probably take over...just let me know

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can wait until you get back, that will be fine. If we need it before you return, we'll create a new PR. Have fun!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @ccpowers, are you back? Any interest in picking this back up? We're pretty close to finishing.

'value': opts.modelFormat ? opts.modelFormat.apply(this, [$(option).val()]) : $(option).val()});
});

return {collection: collection,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add an issue to Torso that explains the bug and reference the issue in this commit message.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. See #84.

labelPath: 'label',
valuePath: 'value'};
}
});

Expand Down