Skip to content

Instantly share code, notes, and snippets.

@yreynhout
Created August 4, 2012 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yreynhout/3256615 to your computer and use it in GitHub Desktop.
Save yreynhout/3256615 to your computer and use it in GitHub Desktop.
Viewmodels - Building blocks
var TextInput = function (validationOptions) {
if (!this instanceof TextInput) {
return new TextInput(validationOptions);
}
validationOptions = validationOptions || {
rules: {},
messages: {}
};
var my = {
emptyValue: '',
validationOptions: validationOptions,
validationMethods: [validation.methods.required, validation.methods.minLength, validation.methods.maxLength]
}, self = new ValueInputObject(my);
return self;
};
var NumericInput = function (validationOptions) {
if (!this instanceof NumericInput) {
return new NumericInput(validationOptions);
}
validationOptions = validationOptions || {
rules: {},
messages: {}
};
validationOptions.rules.number = true;
var my = {
emptyValue: '',
validationOptions: validationOptions,
validationMethods: [validation.methods.required, validation.methods.number, validation.methods.min, validation.methods.max]
}, self = new ValueInputObject(my);
return self;
};
var ValueInputObject = function (my) {
if (!this instanceof ValueInputObject) {
return new ValueInputObject(my);
}
var self = ValidatableExtension(
PausableSubscriberExtension(
DisposableExtension(
FocusExtension(
EnableExtension(
VisibleExtension(
this)))))),
baseValue;
my = my || {};
my.emptyValue = my.emptyValue !== undefined ? my.emptyValue : null;
my.validationOptions = my.validationOptions || {
rules: {},
messages: {}
};
my.validationMethods = my.validationMethods || [];
baseValue = my.emptyValue;
self.Value = ko.observable(my.emptyValue);
self.validate = function () {
var value = ko.utils.unwrapObservable(self.Value);
var result = validation.validate(value, my.validationMethods, my.validationOptions);
self.IsValid(result.isValid);
self.ValidationMessage(result.isValid ? '' : result.messages[0]);
return result.isValid;
};
self.invalidate = function(message) {
self.IsValid(false);
self.ValidationMessage(message);
};
self.bind = function (event, callback) {
if (event === 'ValueChanged') {
self.addSubscription(self.Value.subscribe(self.interceptSubscriber(function (value) {
callback(value);
})));
}
};
self.clear = function () {
self.Value(my.emptyValue);
self.clearValidation();
};
self.reset = function () {
self.Value(baseValue);
self.clearValidation();
};
self.isChanged = function () {
return ko.utils.unwrapObservable(self.Value) !== baseValue;
};
self.getValue = function () {
return ko.utils.unwrapObservable(self.Value);
};
self.setValue = function (value) {
baseValue = value;
self.Value(value);
};
return self;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment