![keyNames keyNames]()
本文介绍了Ember.js ArrayController错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我正在尝试测试以下示例Ember.js代码,但我总是在Chrome浏览器控制台中显示以下错误: 未捕获TypeError:对象[object Object]的属性'_super'不是函数 代码: MovieTracker.moviesController = Ember.ArrayController.create({ content:[], init:function(){ this._super(); var list = [ MovieTracker.Movie.create({ title:'Movie 1',评分:4}), MovieTracker.Movie.create({标题:电影2,评分:5 })]; this.set ('content',list); } }); 我正在使用Ember-1.3.2.js $ b $有人可以告诉我我在这里缺少什么?以及如何解决这个错误? 根据@ kingpin2k的建议,将.create转换为.extend后的新错误消息 TypeError:Object function(){if(!wasApplied){Class.proto(); // 准备原型...} o_defineProperty(这是GUID_KEY, undefinedDescriptor); o_defineProperty(this,'_super', undefinedDescriptor); var m = meta(this),proto = m.proto; m.proto = this; if(initMixins){//在本地捕获,所以我们可以通过变量var mixins = initMixins清除已关闭的; initMixins = null; this.reopen.apply(this,mixins); } if(initProperties){//在本地捕获,以便我们可以清除已关闭的变量var props = initProperties; initProperties = null; var concatenatedProperties = this.concatenatedProperties; for(var i = 0,l = props.length; i< l; i ++){var properties = props [i]; Ember.assert(Ember.Object.create no longer support in other definition,use createWithMixins instead。,!(properties instanceof Ember.Mixin)); if(typeof properties!=='object'&& properties!== undefined){throw new Ember.Error(Ember.Object.create只接受对象);如果(!properties){continue; } var keyNames = Ember.keys(properties);对于(var j = 0,ll = keyNames.length; j< ll; j ++){var keyName = keyNames [j]; if(!properties.hasOwnProperty(keyName)){continue; } var value = properties [keyName],IS_BINDING = Ember.IS_BINDING;如果(IS_BINDING.test(keyName)){var bindings = m.bindings; if(!bindings) {bindings = m.bindings = {}; } else if (!m.hasOwnProperty('bindings')){bindings = m.bindings = o_create(m.bindings); } bindings [keyName] = value; } var desc = m.descs [keyName]; Ember.assert(Ember.Object.create不再支持定义计算属性,!(value instanceof Ember.ComputedProperty)); Ember.assert(Ember.Object.create不再支持定义调用_super的方法,!(typeof value === 'function'&& value.toString()。indexOf ('._super')!== -1)); Ember.assert( actions 必须在延长时间提供,而不是在使用Ember.ActionHandler时创建+意见+ 控制器和路由),!((keyName ==='actions')&&b $ b Ember.ActionHandler.detect(this))); if(concatenatedProperties& indexOf(concatenatedProperties,keyName)> = 0){var baseValue = this [keyName]; if(baseValue){if('function'=== typeof baseValue.concat){value = baseValue.concat(value); } else {value = Ember.makeArray(baseValue).concat(value); }} else {value = Ember.makeArray(value); }} if(desc){desc.set(this,keyName, value); } else {if(typeof this.setUnknownProperty ==='function'&& !(keyName in this)){this.setUnknownProperty(keyName,value); } else if(MANDATORY_SETTER){Ember.defineProperty(this,keyName,null, value); // setup mandatory setter} else {this [keyName] = value; }} }}} finishPartial(this,m); this.init.apply(this,arguments); m.proto = proto; finishChains(本); sendEvent(this,init); }没有方法'get' 解决方案经过大量的试验,问题出现在控制器名称的拼写和案例中。例如(根据您的问题代码)调用: MovieTracker.moviesController.get('length'); 而控制器的名称为MoviesController,大写M将会给您此错误。所以请尝试双重检查您的代码,确保您的正确名称正确。 保持控制器名称与资本M也是一个很好的做法@ kingpin2k推荐 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:Uncaught TypeError: Property '_super' of object [object Object] is not a functionCode: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.jscan 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 TypeError: Object function () { if (!wasApplied) { Class.proto(); // prepare prototype... } o_defineProperty(this, GUID_KEY, undefinedDescriptor); o_defineProperty(this, '_super', undefinedDescriptor); var m = meta(this), proto = m.proto; m.proto = this; if (initMixins) { // capture locally so we can clear the closed over variable var mixins = initMixins; initMixins = null; this.reopen.apply(this, mixins); } if (initProperties) { // capture locally so we can clear the closed over variable var props = initProperties; initProperties = null; var concatenatedProperties = this.concatenatedProperties; 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)); if (typeof properties !== 'object' && properties !== undefined) { throw new Ember.Error("Ember.Object.create only accepts objects."); } if (!properties) { continue; } var keyNames = Ember.keys(properties); for (var j = 0, ll = keyNames.length; j < ll; j++) { var keyName = keyNames[j]; if (!properties.hasOwnProperty(keyName)) { continue; } var value = properties[keyName], IS_BINDING = Ember.IS_BINDING; if (IS_BINDING.test(keyName)) { var bindings = m.bindings; if (!bindings) { bindings = m.bindings = {}; } else if (!m.hasOwnProperty('bindings')) { bindings = m.bindings = o_create(m.bindings); } bindings[keyName] = value; } 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 no longer supports defining methods that call _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 (i.e. views, " + "controllers & routes).", !((keyName === 'actions') && Ember.ActionHandler.detect(this))); if (concatenatedProperties && indexOf(concatenatedProperties, keyName) >= 0) { var baseValue = this[keyName]; if (baseValue) { if ('function' === typeof baseValue.concat) { value = baseValue.concat(value); } else { value = Ember.makeArray(baseValue).concat(value); } } else { value = Ember.makeArray(value); } } if (desc) { desc.set(this, keyName, value); } else { if (typeof this.setUnknownProperty === 'function' && !(keyName in this)) { this.setUnknownProperty(keyName, value); } else if (MANDATORY_SETTER) { Ember.defineProperty(this, keyName, null, value); // setup mandatory setter } else { this[keyName] = value; } } } } } finishPartial(this, m); this.init.apply(this, arguments); m.proto = proto; finishChains(this); sendEvent(this, "init"); } has no method 'get' 解决方案 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. 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 这篇关于Ember.js ArrayController错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 08-01 18:53