Skip to content

Instantly share code, notes, and snippets.

@EWhite613
Created January 10, 2019 20:35
Show Gist options
  • Save EWhite613/9d045fe7448460b31570f1787c83e41e to your computer and use it in GitHub Desktop.
Save EWhite613/9d045fe7448460b31570f1787c83e41e to your computer and use it in GitHub Desktop.
Read Only set nested
import Ember from 'ember';
import {computed} from '@ember/object'
import {isNone, isPresent} from '@ember/utils'
export function aliasFallbacks (...fallbacks) {
return computed(...fallbacks, function () {
for (let i = 0; i < fallbacks.length; i++) {
const fallback = fallbacks[i]
const result = this.get(fallback)
if (isPresent(result)) return result
}
}).readOnly()
}
export default Ember.Controller.extend({
backupApp: {
name: 'Foo'
},
app: undefined,
aliasApp: aliasFallbacks('app', 'backupApp'),
actions: {
toggleAppName () {
// this.set('aliasApp', 'Bar') // Throws error
this.set('aliasApp.name', 'Bar') // Doesn't. can I mark a whole object as read only?
}
}
});
<h1>Welcome to {{aliasApp.name}}</h1>
<br>
<br>
{{outlet}}
<button {{action "toggleAppName"}}> Change </button>
<br>
<br>
{
"version": "0.15.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js",
"ember": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment