jqwidgets-framework
Version:
jQWidgets is an advanced jQuery, Angular, React, ASP .NET MVC, Custom Elements and HTML5 UI framework.
123 lines (107 loc) • 5.44 kB
HTML
<html lang="en">
<head>
<title id='Description'>This demo demonstrates how to integrate the jqxNumberInput widget with Knockout.</title>
<link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" type="text/css" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1 minimum-scale=1" />
<script type="text/javascript" src="../../scripts/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../scripts/demos.js"></script>
<script type="text/javascript" src="../../scripts/knockout-3.0.0.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxcore.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxbuttons.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxscrollbar.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxpanel.js"></script>
<script type="text/javascript" src="../../jqwidgets/jqxnumberinput.js"></script>
<script type="text/javascript">
(function ($, ko) {
ko.jqwidgets = ko.jqwidgets || {};
ko.jqwidgets.dataBinding = function (settings) {
var me = this;
var binding = {},
name = settings.name;
var updating = false;
var updatingFromObservable = false;
binding.init = function (element, valueAccessor, allBindingAccessor, viewModel) {
var unwrappedValue = ko.utils.unwrapObservable(valueAccessor());
var modelOptions = ko.toJS(unwrappedValue);
widget = $.data(element)[name].instance;
if (settings.events) {
$.each(settings.events, function () {
var eventName = this;
$(element).on(eventName + '.' + element.id, function (event) {
if (!updatingFromObservable) {
updating = true;
var val = valueAccessor();
var property = settings.getProperty(widget, event, eventName);
if (val.value && $.isFunction(val.value)) {
val.value(property.value);
}
else if (val.value) {
valueAccessor(property.value);
}
updating = false;
}
});
});
}
};
binding.update = function (element, valueAccessor, allBindingAccessor, viewModel) {
var unwrappedValue = ko.utils.unwrapObservable(valueAccessor());
var modelOptions = ko.toJS(unwrappedValue);
widget = $.data(element)[name].instance;
if (updating)
return;
$.each(settings, function (name, value) {
if (modelOptions[name]) {
if (!updating) {
updatingFromObservable = true;
settings.setProperty(widget, name, widget[name], modelOptions[name]);
updatingFromObservable = false;
}
}
});
};
ko.bindingHandlers[settings.name] = binding;
};
ko.jqwidgets.dataBinding = new ko.jqwidgets.dataBinding({
name: "jqxNumberInput",
value: null,
events: ['valuechanged'],
getProperty: function (object, event, eventName) {
if (eventName == 'valuechanged') {
return { name: "value", value: object.val() };
}
},
setProperty: function (object, key, value, newValue) {
if (key == 'value') {
object.val(newValue);
}
}
});
} (jQuery, ko));
$(document).ready(function () {
var viewModel = function () {
this.number = ko.observable(199.35);
};
// Create jqxNumberInput
$("#jqxNumberInput").jqxNumberInput({ width: '250px', height: '25px'});
var vm = new viewModel();
ko.applyBindings(vm);
$("#Button").jqxButton({ theme: theme });
$("#Button").click(function () {
alert("Value: " + vm.number());
});
});
</script>
</head>
<body class='default'>
<div id='jqxWidget'>
<div style='margin-top: 10px;'>
Number</div>
<div data-bind="jqxNumberInput: {value: number}" style='margin-top: 3px;' id='jqxNumberInput'>
</div>
<input type="button" value="Get Value" style="margin-top: 10px;" id="Button" />
</div>
</body>
</html>