Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Ember from 'ember';
- import hbs from 'htmlbars-inline-precompile';
- const createStore = (reducer) => {
- var pointer = 0;
- var state = [];
- var listeners = [];
- var firstState = reducer();
- state.push(firstState);
- var store = {
- getState() {
- return state[pointer];
- },
- dispatch(action) {
- var nextState = reducer(state[pointer], action);
- pointer++;
- state.push(nextState);
- listeners.forEach((callback) => {
- callback();
- });
- },
- subscribe(callback) {
- listeners.push(callback);
- },
- goBack() {
- pointer--;
- listeners.forEach((callback) => {
- callback();
- });
- },
- goForward() {
- pointer++;
- listeners.forEach((callback) => {
- callback();
- });
- }
- }
- return store;
- };
- const reducer = (state = 0, action) => {
- if (action && action.type === 'ADD') {
- console.log('ADDING!');
- return state + 1;
- }
- return state;
- };
- const store = createStore(reducer);
- export default Ember.Component.extend({
- init() {
- this._super(...arguments);
- store.subscribe(() => {
- this.notifyPropertyChange('number');
- });
- },
- number: Ember.computed(function() {
- return store.getState();
- }),
- actions: {
- add() {
- store.dispatch({type: 'ADD'});
- },
- back() {
- store.goBack();
- },
- forward() {
- store.goForward();
- }
- },
- layout: hbs`
- <h1>{{number}}</h1>
- <button onclick={{action "add"}}>ADD</button>
- <button onclick={{action "back"}}>Back</button>
- <button onclick={{action "forward"}}>Forward</button>
- `
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement