Quantcast
Channel: Ember.JS - Latest topics
Viewing all articles
Browse latest Browse all 4828

Using FastBoot and localStorage

$
0
0

@midget2000x wrote:

The FastBoot docs say that you can't use localStorage with fastboot...but I'm finding otherwise. But before I continue down this path I want to be sure this is a tenable solution. Newb to both fastboot and localStorage.

I'm writing a shopping cart app that saves the cart contents to localStorage. The cart is initialized via an instance-initializer:

export function initialize(appInstance) {
    let CartService = appInstance.factoryFor('service:cart');
	let cart = CartService.create();

	// check if there's a cart in localstorage
	if (window.localStorage && window.localStorage.getItem('cart')) {
		cart.loadCart(window.localStorage.getItem('cart')) // existing cart
	} else {
		cart.createCart(); // create new cart
	}

    appInstance.register('cart:main', cart, { instantiate: false });
    appInstance.inject('controller', 'cart', 'cart:main');
    appInstance.inject('component', 'cart', 'cart:main');
}
export default {
    name: 'cart',
    initialize
};

OK when that runs in fastboot obviously the window.localStorage stuff evaluates to false and the cart.createCart() method is called in the cart service. I'm getting around the inevitable error by just checking if I'm in the fastboot environment. If so, don't do anything.

// cart.js service
...
fastboot: Ember.inject.service(),
isFastBoot: Ember.computed.reads('fastboot.isFastBoot'),

createCart() {
	if (!get(this, 'isFastBoot')) { // skip if in fastboot
        let cart = this.get('store').createRecord('cart');
	    cart.save().then(response => {
			window.localStorage.setItem('cart', response.get('id'));
		});
        set(this, 'cartObj', cart);
	}
}
...

So when the instance initializer runs in the browser, localStorage is available and everything works as normal. When I hard refresh or reboot stuff, everything has persisted as it should.

Is there any problem with this approach?

If not, is there a way to determine the environment (fastboot or not) in the instance-initializer itself?

Posts: 1

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 4828

Trending Articles