Skip to content

Instantly share code, notes, and snippets.

@teddyzeenny
teddyzeenny / gist:9291219
Created March 1, 2014 15:10
Event for load hooks
Ember.runLoadHooks = function(name, object) {
loaded[name] = object;
var event = new Event(name);
window.dispatchEvent(event);
if (loadHooks[name]) {
forEach.call(loadHooks[name], function(callback) {
callback(object);
@teddyzeenny
teddyzeenny / gist:8981693
Last active August 29, 2015 13:56
Ember Logging

Loggers

In order to log anything, you will need to request specific logger singleton. To get a logger, use Logger.for(nameOfLogger).

Example:

var logger = Logger.for('render.template');

function render(template) {
@teddyzeenny
teddyzeenny / gist:8651274
Created January 27, 2014 16:03
Using CP to prevent test leaks
SidebarView = Ember.View.extend({
templateName: 'sidebar',
elementId: 'sidebar',
classNameBindings: ['position', 'isVisible'],
contentView: function() { return Ember.ContainerView.create() }.property()
});
@teddyzeenny
teddyzeenny / gist:6453457
Created September 5, 2013 17:36
ED 1.0.beta Step 1 in upgrade
DS.Store.reopen({
transaction: function() {
return {
records: [],
add: function(record) {
this.records.pushObject(record);
},
remove: function(record) {
this.records.removeObject(record);
},
@teddyzeenny
teddyzeenny / gist:6242646
Created August 15, 2013 17:15
Lazy chains errors
Uncaught TypeError: Cannot call method 'didChange' of undefined ember.js?body=1:2373
chainsDidChange ember.js?body=1:2373
Ember.propertyDidChange ember.js?body=1:2307
Ember.EachProxy.Ember.Object.extend.contentKeyDidChange ember.js?body=1:13319
sendEvent ember.js?body=1:2106
notifyObservers ember.js?body=1:2441
Ember.propertyDidChange ember.js?body=1:2308
iterDeps ember.js?body=1:2345
dependentKeysDidChange ember.js?body=1:2329
Ember.propertyDidChange ember.js?body=1:2306
@teddyzeenny
teddyzeenny / gist:6193759
Last active December 20, 2015 20:58
DebugAdapter
var get = Ember.get, capitalize = Ember.String.capitalize, underscore = Ember.String.underscore, DS = window.DS ;
var DataAdapter = Ember.Object.extend({
init: function() {
this._super();
this.releaseMethods = Ember.A();
},
/**
The application being debugged.
@teddyzeenny
teddyzeenny / gist:6177557
Last active December 20, 2015 18:39
Data adapter: option 3
getModelTypes: function(typeAdded, typeUpdated, typeRemoved) {
// code to fetch types ...
// ...
// .. setup array observers to call typeAdded, typeUpdated, and typeRemoved on changes
var releaseMethod = function() {
//.. code to clear all observers
};
@teddyzeenny
teddyzeenny / gist:6176897
Created August 7, 2013 18:20
Data Adapter API - option 2
// Disadvantage: releasing model types will clear all observers
// irrespective of how many times getModelTypes was requested
// or who made the request
getModelTypes: function(target, typesReceived, typeAdded, typeUpdated, typeRemoved) {
// code to fetch types ...
// ...
// call typesReceived and pass fetched types
typesReceived.call(target, types);
@teddyzeenny
teddyzeenny / gist:6176786
Last active December 20, 2015 18:38
Data Adapter API - option 1
// Advantage: the adapter can be used by multiple tools at the same time and every `getModelTypes` request is isolated.
getModelTypes: function(target, typesReceived, typeAdded, typeUpdated, typeRemoved) {
// code to fetch types ...
// ...
// call typesReceived and pass fetched types
typesReceived.call(target, types);
// .. setup array observers to call typeAdded, typeUpdated, and typeRemoved on changes
@teddyzeenny
teddyzeenny / gist:6139118
Last active December 20, 2015 13:29
_debugInfo format
propertyInfo: {
// include other mixins/properties not listed here
includeOtherProperties: true,
// do not display these properties
skipProperties: ['toString', 'send', 'withTransaction'],
// do not display these mixins along with their properties
skipMixins: [ 'Ember.Evented'],
// don't calculate these CPs automatically (unless cached)
expensiveProperties: ['maritalStatus', 'avatar'],