[英]Ember.js ArrayController error
I am trying to test the following sample Ember.js code but I am always getting the following error displayed in the Chrome browser console: 我正在尝试测试以下示例Ember.js代码,但始终在Chrome浏览器控制台中显示以下错误:
Uncaught TypeError: Property '_super' of object [object Object] is not a function
Code: 码:
MovieTracker.moviesController = Ember.ArrayController.create({
content: [],
init: function(){
this._super();
var list = [
MovieTracker.Movie.create({
title: 'Movie 1',
rating: 4 }),
MovieTracker.Movie.create({
title: 'Movie 2',
rating: 5
})];
this.set('content', list);
}
});
I am using Ember-1.3.2.js 我正在使用Ember-1.3.2.js
can someone please tell me what I am missing here? 有人可以告诉我我在这里想念的吗? and how to solve this error?
以及如何解决这个错误?
New error message after changing .create to .extend as recommended by @kingpin2k 按照@ kingpin2k的建议将.create更改为.extend之后的新错误消息
TypeError: Object function () { if (!wasApplied) { Class.proto();
TypeError:对象函数(){如果(!wasApplied){Class.proto(); // prepare prototype... } o_defineProperty(this, GUID_KEY, undefinedDescriptor);
//准备原型...} o_defineProperty(this,GUID_KEY,undefinedDescriptor); o_defineProperty(this, '_super', undefinedDescriptor);
o_defineProperty(this,'_super',undefinedDescriptor); var m = meta(this), proto = m.proto;
var m = meta(this),proto = m.proto; m.proto = this;
m.proto = this; if (initMixins) { // capture locally so we can clear the closed over variable var mixins = initMixins;
if(initMixins){//本地捕获,因此我们可以清除变量var mixins = initMixins的闭包; initMixins = null;
initMixins = null; this.reopen.apply(this, mixins);
this.reopen.apply(this,mixins); } if (initProperties) { // capture locally so we can clear the closed over variable var props = initProperties;
} if(initProperties){//本地捕获,因此我们可以清除变量var props = initProperties的闭包; initProperties = null;
initProperties = null; var concatenatedProperties = this.concatenatedProperties;
var concatenatedProperties = this.concatenatedProperties; for (var i = 0, l = props.length; i < l; i++) { var properties = props[i];
for(var i = 0,l = props.length; i <l; i ++){var properties = props [i]; Ember.assert("Ember.Object.create no longer supports mixing in other definitions, use createWithMixins instead.", !(properties instanceof Ember.Mixin));
Ember.assert(“ Ember.Object.create不再支持其他定义的混合,请改用createWithMixins。”,!(Ember.Mixin的属性instance); if (typeof properties !== 'object' && properties !== undefined) { throw new Ember.Error("Ember.Object.create only accepts objects.");
如果(typeof属性!=='对象'&&属性!==未定义){抛出新的Ember.Error(“ Ember.Object.create只接受对象。”); } if (!properties) { continue;
}如果(!properties){继续; } var keyNames = Ember.keys(properties);
} var keyNames = Ember.keys(properties); for (var j = 0, ll = keyNames.length; j < ll; j++) { var keyName = keyNames[j];
for(var j = 0,ll = keyNames.length; j <ll; j ++){var keyName = keyNames [j]; if (!properties.hasOwnProperty(keyName)) { continue;
如果(!properties.hasOwnProperty(keyName)){继续; } var value = properties[keyName], IS_BINDING = Ember.IS_BINDING;
} var value = properties [keyName],IS_BINDING = Ember.IS_BINDING; if (IS_BINDING.test(keyName)) { var bindings = m.bindings;
如果(IS_BINDING.test(keyName)){var bindings = m.bindings; if (!bindings) { bindings = m.bindings = {};
if(!bindings){绑定= m.bindings = {}; } else if (!m.hasOwnProperty('bindings')) { bindings = m.bindings = o_create(m.bindings);
}否则if(!m.hasOwnProperty('bindings')){绑定= m.bindings = o_create(m.bindings); } bindings[keyName] = value;
} bindings [keyName] =值; } var desc = m.descs[keyName];
} var desc = m.descs [keyName]; Ember.assert("Ember.Object.create no longer supports defining computed properties.", !(value instanceof Ember.ComputedProperty));
Ember.assert(“ Ember.Object.create不再支持定义计算属性。”,!(Ember.ComputedProperty的值实例)); Ember.assert("Ember.Object.create no longer supports defining methods that call _super.", !(typeof value === 'function' && value.toString().indexOf('._super') !== -1));
Ember.assert(“ Ember.Object.create不再支持定义调用_super的方法。”,!(typeof value ==='function'&& value.toString()。indexOf('._ super')!== -1 )); Ember.assert("
actions
must be provided at extend time, not at create " + "time, when Ember.ActionHandler is used (ie views, " + "controllers & routes).", !((keyName === 'actions') && Ember.ActionHandler.detect(this)));使用Ember.ActionHandler时,必须在扩展时间提供Ember.assert(“
actions
,而不是在创建” +“时间(即视图,” +“控制器和路由)。”,!((keyName ==='actions ')&& Ember.ActionHandler.detect(this))); if (concatenatedProperties && indexOf(concatenatedProperties, keyName) >= 0) { var baseValue = this[keyName];if(concatenatedProperties && indexOf(concatenatedProperties,keyName)> = 0){var baseValue = this [keyName]; if (baseValue) { if ('function' === typeof baseValue.concat) { value = baseValue.concat(value);
if(baseValue){if('function'=== typeof baseValue.concat){value = baseValue.concat(value); } else { value = Ember.makeArray(baseValue).concat(value);
} else {value = Ember.makeArray(baseValue).concat(value); } } else { value = Ember.makeArray(value);
}} else {value = Ember.makeArray(value); } } if (desc) { desc.set(this, keyName, value);
}} if(desc){desc.set(this,keyName,value); } else { if (typeof this.setUnknownProperty === 'function' && !(keyName in this)) { this.setUnknownProperty(keyName, value);
} else {if(typeof this.setUnknownProperty ==='function'&&!(this中的keyName)){this.setUnknownProperty(keyName,value); } else if (MANDATORY_SETTER) { Ember.defineProperty(this, keyName, null, value);
} else if(MANDATORY_SETTER){Ember.defineProperty(this,keyName,null,value); // setup mandatory setter } else { this[keyName] = value;
//设置强制设置器} else {this [keyName] = value; } } } } } finishPartial(this, m);
}}}}} finishPartial(this,m); this.init.apply(this, arguments);
this.init.apply(this,arguments); m.proto = proto;
m.proto = proto; finishChains(this);
finishChains(本); sendEvent(this, "init");
sendEvent(this,“ init”); } has no method 'get'
}没有方法'get'
I was having the same issue as I'm following the same book as well, finally figured out why this wasn't working on Ember 1.5.1: 我也遇到了同样的问题,就像我在看同一本书一样,最终弄清楚了为什么在Ember 1.5.1上不起作用:
So the following code should work for anyone interested... 因此,以下代码应适用于任何有兴趣的人...
MovieTracker.MoviesController = Ember.ArrayController.extend({
content: [],
init: function() {
var list = [
MovieTracker.Movie.create({
title: 'Movie 1',
rating: 4
}),
MovieTracker.Movie.create({
title: 'Movie 2',
rating: 5
})];
this.set('content', list);
}});
I had the same problem before and after a lot of trials the problem was in the controller name spelling and case. 在多次试验前后,我遇到了相同的问题,问题出在控制器名称的拼写和大小写上。 For example (based on your question code) calling:
例如(根据您的问题代码)调用:
MovieTracker.moviesController.get('length');
while the name of the controller is MoviesController with a capital M will give you this error. 而控制器的名称是MoviesController,并以大写M表示,则会出现此错误。 So try double checking your code, make sure you have the correct name with correct case.
因此,请仔细检查您的代码,确保您使用正确的名称和正确的大小写。
It is also a good practice to keep controller name with capital M as @kingpin2k recommended 将控制器名称保留为大写M也是一个好习惯,如@ kingpin2k建议
MoviesController
should be capitalized and you should be extending Ember.ArrayController
not creating it. MoviesController
应该大写,并且应该扩展Ember.ArrayController
而不创建它。
MovieTracker.MoviesController = Ember.ArrayController.extend({
content: [],
init: function(){
this._super();
var list = [
MovieTracker.Movie.create({
title: 'Movie 1',
rating: 4 }),
MovieTracker.Movie.create({
title: 'Movie 2',
rating: 5
})];
this.set('content', list);
}
});
'create' works perfect for the example in this book. “创建”非常适合本书中的示例。 Below code worked for me
下面的代码为我工作
MovieTracker.MoviesController = Ember.ArrayController.create({
content: [],
init: function(){
var list = [
MovieTracker.Movie.create({
title: 'The Avengers',
rating: 4
}),
MovieTracker.Movie.create({
title: 'Spiderman',
rating: 5
})];
this.set('content', list);
}
});
DEBUG: Ember : 1.5.0 DEBUG: Handlebars : 1.1.2 DEBUG: jQuery : 1.10.2 调试:灰烬:1.5.0调试:把手:1.1.2调试:jQuery:1.10.2
Ember Debugger Active VM2276:161 MovieTracker.MoviesController.get('length'); 灰烬调试器活动VM2276:161 MovieTracker.MoviesController.get('length');
2 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.