1. Home
  2. /
  3. Knockout-js
  4. /
  5. Knockout.js Counter with Double Increment

Knockout.js Counter with Double Increment - Knockout-js Typing CST Test

Loading…

Knockout.js Counter with Double Increment — Knockout-js Code

Counter that increments by 2 on a special button.

<div class="container" data-bind="css: isDark() ? 'dark-theme' : 'light-theme'">
	<h2>Counter: <span data-bind="text: count"></span></h2>
	<div>
		<button data-bind="click: increment">+</button>
		<button data-bind="click: doubleIncrement">++</button>
		<button data-bind="click: decrement">-</button>
		<button data-bind="click: reset">Reset</button>
	</div>
	<button data-bind="click: toggleTheme">Toggle Theme</button>
</div>

<script>
function CounterViewModel() {
	this.count = ko.observable(0);
	this.isDark = ko.observable(false);

	this.increment = () => { this.count(this.count() + 1); };
	this.doubleIncrement = () => { this.count(this.count() + 2); };
	this.decrement = () => { this.count(this.count() - 1); };
	this.reset = () => { this.count(0); };
	this.toggleTheme = () => { this.isDark(!this.isDark()); };
}
ko.applyBindings(new CounterViewModel());
</script>

Knockout-js Language Guide

Knockout.js is a lightweight JavaScript library that uses the MVVM (Model-View-ViewModel) pattern to create responsive, data-driven UIs with declarative bindings. It emphasizes simplicity, observables, and automatic UI updates.

Primary Use Cases

  • ▸Data-driven dashboards
  • ▸Forms with heavy user interaction
  • ▸Enterprise legacy SPA systems
  • ▸MVVM-style large UI logic
  • ▸Low-dependency applications where frameworks like React/Vue are unnecessary

Notable Features

  • ▸Observable variables and computed observables
  • ▸Declarative two-way bindings
  • ▸Automatic UI refresh
  • ▸Dependency tracking engine
  • ▸Templating and custom bindings

Origin & Creator

Created by Steve Sanderson at Microsoft in 2010 to simplify dynamic web UIs using the MVVM pattern.

Industrial Note

Knockout.js is still used in long-lived enterprise systems, internal dashboards, and large legacy codebases due to its stability, backward compatibility, and lightweight footprint.

Quick Explain

  • ▸Knockout enables dynamic UI updates using observable variables.
  • ▸It provides a clean separation between data, logic, and UI using MVVM.
  • ▸Knockout's declarative bindings allow HTML to stay simple and connected to data automatically.

Core Features

  • ▸Observables for reactive data
  • ▸Computed functions for derived state
  • ▸Declarative HTML bindings
  • ▸MVVM architecture
  • ▸Extensible custom binding handlers

Learning Path

  • ▸Learn observables
  • ▸Understand computed and subscriptions
  • ▸Master data-bind syntax
  • ▸Build modular MVVM structures
  • ▸Create custom bindings and templates

Practical Examples

  • ▸Todo list with observables
  • ▸Form with validation
  • ▸Dashboard with live-updating values
  • ▸Custom binding for DOM interactions
  • ▸List rendering with templates

Comparisons

  • ▸Simpler than React - fully binding-based
  • ▸Lighter than Angular - no heavy framework
  • ▸No virtual DOM - relies on direct DOM bindings
  • ▸Excellent for forms; not ideal for huge SPAs
  • ▸Stable alternative for long-term enterprise apps

Strengths

  • ▸Very lightweight (~60 KB)
  • ▸Simple learning curve
  • ▸Great for forms, UIs with lots of data-binding
  • ▸No virtual DOM - direct DOM binding
  • ▸Excellent backward compatibility

Limitations

  • ▸Not ideal for large modular SPAs compared to modern frameworks
  • ▸Manual component structure
  • ▸Bindings can get messy for complex pages
  • ▸Lacks modern ecosystem of React/Vue
  • ▸No built-in state management or routing

When NOT to Use

  • ▸When building massive SPAs
  • ▸When needing modern UI patterns
  • ▸When requiring large ecosystems and plugins
  • ▸When needing SSR-first architecture
  • ▸When team prefers component-based frameworks

Cheat Sheet

  • ▸`ko.observable(val)` - create observable
  • ▸`ko.observableArray([])` - array observable
  • ▸`ko.computed(fn)` - computed state
  • ▸`data-bind='text: name'` - bind values
  • ▸`ko.applyBindings(vm)` - initialize bindings

FAQ

  • ▸Is Knockout.js still used?
  • ▸Yes - many enterprise systems rely on it long-term.
  • ▸Does KO support two-way binding?
  • ▸Yes, via `value` and `observable()`.
  • ▸Can KO be used with modern bundlers?
  • ▸Yes, via npm installations.
  • ▸Is Knockout a framework?
  • ▸No - it is a lightweight MVVM library.
  • ▸Can KO interoperate with React/Vue?
  • ▸Yes, for embedding legacy KO widgets.

30-Day Skill Plan

  • ▸Week 1: MVVM basics + observables
  • ▸Week 2: Computed + event handling
  • ▸Week 3: Templating + modularization
  • ▸Week 4: Custom bindings
  • ▸Week 5: Advanced architecture patterns

Final Summary

  • ▸Knockout.js is a stable and lightweight MVVM library.
  • ▸Great for dynamic forms and data-binding-heavy UIs.
  • ▸Its lifecycle and reactivity rely on observables.
  • ▸Ideal for enterprise legacy systems.
  • ▸Still valuable where simple declarative bindings are enough.

Project Structure

  • ▸index.html - UI + bindings
  • ▸viewmodels/ - JS logic layer
  • ▸models/ - data structures
  • ▸templates/ - reusable templates
  • ▸lib/ - knockout + plugins

Monetization

  • ▸Build enterprise dashboards
  • ▸Maintain legacy KO systems
  • ▸KO consulting/modernization
  • ▸Migration services
  • ▸Custom KO plugins and bindings

Productivity Tips

  • ▸Use mapping plugin for JSON
  • ▸Keep bindings simple
  • ▸Prefer computed for UI logic
  • ▸Split huge viewmodels
  • ▸Leverage Chrome KO debugging tools

Basic Concepts

  • ▸Observables (`ko.observable()`)
  • ▸Observable arrays
  • ▸Computed observables
  • ▸Declarative bindings (`data-bind`)
  • ▸`applyBindings()` to activate Knockout

Official Docs

  • ▸https://knockoutjs.com/documentation/
  • ▸https://github.com/knockout/knockout
  • ▸https://learn.knockoutjs.com/

More Knockout-js Typing Exercises

Knockout.js Simple CounterKnockout.js Counter with StepKnockout.js Counter with Min/MaxKnockout.js Counter with HistoryKnockout.js Counter with Auto IncrementKnockout.js Counter with Even/Odd IndicatorKnockout.js Counter with LocalStorageKnockout.js Counter with Color Themes

Practice Other Languages

CReactPythonC++RustTypeScriptKotlinPHPJavaC#RubyMqlCqlN1qlCypher