-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added automatic generation of select options for stickit bindings. #69
base: master
Are you sure you want to change the base?
Changes from 1 commit
9a65077
7baf251
28ba9b6
c4ca7e1
0518dd7
48f46a5
7990583
53ac0d8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -229,6 +229,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; | ||
}); | ||
}, | ||
|
@@ -356,7 +361,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 | ||
|
@@ -381,6 +386,29 @@ | |
}; | ||
}, | ||
|
||
/** | ||
* @method _generateSelectOptions | ||
* @param element {Element} The select element to generate options for | ||
* @param opts {Object} Additional behavior options for the bindings | ||
* @param [options.modelFormat] {Object} The function called before setting model values | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. opts.modelFormat? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. |
||
* @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(), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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? There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. There was a problem hiding this comment. Choose a reason for hiding this commentThe 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? There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. There was a problem hiding this comment. Choose a reason for hiding this commentThe 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? There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 There was a problem hiding this comment. Choose a reason for hiding this commentThe 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! There was a problem hiding this comment. Choose a reason for hiding this commentThe 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, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. See #84. |
||
labelPath: 'label', | ||
valuePath: 'value'}; | ||
|
||
}, | ||
|
||
/** | ||
* Creates the "when" bindings, and collates and invokes the "then" methods for all feedbacks | ||
* Finds all feedback zones that match the "to" field, and binds the "when" events to invoke the "then" method | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
double underscore: __generateSelectOptions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.