0.5.0 • Published 3 years ago

yngwie-mvc v0.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

yngwie-mvc

An MVC framework using yngwie-js

What Is This?

As noted in the readme for yngwie-js, trying to build a practical UI with yngwie-js alone would be "admittedly clunky" - so this is an attempt to build a "more explicit MVC approach". Included are classes for models, views, and controllers with examples found here.

How To Use This

yngwie-mvc is built as an ES6 module, so you can't just require it with nodejs - nor would you want to since it's intended to run client-side in the browser. The two primary use cases then are to either include yngwie-mvc.js as an external source with a SCRIPT tag or install from NPM and import the module into your project with webpack using something like import * as YngwieMVC from "yngwie-mvc".

An Example

// Define model:
let MODEL = YngwieMVC.Model.init({
  "Select A Value":"null",
  "Guitar 1":"Ibanez GRX20L",
  "Guitar 2":"Schecter Omen-6",
  "Guitar 3":"Fender Standard Stratocaster (MIM)",
  "Guitar 4":"Fender Telecaster (MODSHOP)",
  "Guitar 5":"Gibson Les Paul (Studio 2018)",
  "Guitar 6":"Ibanez Prestige RG (RG652AHMLNGB)"
});

// Define view for showing selected value:
let VIEW = YngwieMVC.View.init("p").text("No Guitar Selected");

// Define "controller" for updating view:
let CONTROLLER = (view) => YngwieMVC.Controller.init()
  // Add event to listen for :
  .register("update-view", value => {
    // Changes text of view to value provided by event:
    view.text(value === "null" ? "No Guitar Selected" : value).renderAgain();
  });

// Define another view for selecting value:
let SELECT = (model, controller) =>  {
  // Get all data from model:
  let items = model.state();
  // Generate OPTION elements from model data:
  let options = Object.entries(items).map(([label, value])=>{
    return YngwieMVC.View.init("OPTION", {"value":value}, label);
  })
  // Add options to SELECT and bind event handler to trigger controller when value changes:
  return YngwieMVC.View.init("select")
    .appends(options)
    .on("change", (evt, node) => {
      // Sends value of selected option to controller "update-view" event:
      controller.signal("update-view", node.value);
    });
};

// Initialize everything:
let controller = CONTROLLER(VIEW);        // Initialize controller with view
let select = SELECT(MODEL, controller);   // Initialize SELECT with model and controller
select.render("body");                    // Render and append select to body
VIEW.render("body");                      // Render and append view to body

The full API can be found here.