Skip to content

Instantly share code, notes, and snippets.

@amk221
Last active July 25, 2023 15:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amk221/75a0587be8b073980c040acb94542c68 to your computer and use it in GitHub Desktop.
Save amk221/75a0587be8b073980c040acb94542c68 to your computer and use it in GitHub Desktop.
Get helper
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
export default class ApplicationController extends Controller {
@tracked fooObj;
@tracked fooArr;
}
import Route from '@ember/routing/route';
import ArrayProxy from '@ember/array/proxy';
import ObjectProxy from '@ember/object/proxy';
const PromiseProxyArray = ArrayProxy.extend(PromiseProxyMixin);
import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';
import { later } from '@ember/runloop';
import { resolve } from 'rsvp';
const PromiseProxyObject = ObjectProxy.extend(PromiseProxyMixin);
function promiseObject(maybePromise) {
return PromiseProxyObject.create({
promise: resolve(maybePromise)
});
}
function promiseArray(maybePromise) {
return PromiseProxyArray.create({
promise: resolve(maybePromise)
});
}
function wait(ms) {
return new Promise((resolve) => later(resolve, ms));
}
async function slow(data, ms) {
await wait(ms);
return data;
}
export default class ApplicationRoute extends Route {
setupController(controller, model) {
super.setupController(...arguments);
controller.fooObj = promiseObject(slow({ bar: 'baz' }, 500));
controller.fooArr = promiseArray(slow([{ bar: 'baz' }], 500));
}
}
promise proxy object: {{this.fooObj}} <br>
promise proxy object resolved: {{this.fooObj.bar}} <br>
promise proxy object private content: {{this.fooObj.content.bar}} <br>
promise proxy object with get helper: {{get this.fooObj "bar"}}
<hr />
promise proxy array: {{this.fooArr}} <br>
promise proxy array resolved: {{this.fooArr.firstObject.bar}} <br>
promise proxy array private content: {{this.fooArr.content.0.bar}} <br>
promise proxy array with get helper: {{get this.fooArr "0.bar"}} ⬅️ not working
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment