这让我有点生气。这看起来很简单,但我无法让它发挥作用。
这是我的路由器:
App.Router.map(function() {
this.resource('pages', function() {
this.resource('page', { path: '/:slug' }, function() {
this.route('edit');
});
this.route('add');
});
}
问题在于“添加”路线。
以下是设置:
App.PagesAddRoute = Ember.Route.extend({});
App.PagesAddController = Ember.Controller.extend({});
App.PagesAddView = Ember.View.extend({});
// templates/pages/add.hbs
<h1>Add New Page</h1>
templates/pages.hbs
中有一个出口,页面模板可以很好地呈现。
我在init方法中添加了console.log
所有路由,控制器和视图对象。每个都正确实例化,但当我导航到/ pages / add时,我收到以下错误消息:
TypeError {
message: "Cannot read property 'rerender' of undefined",
stack: "TypeError: Cannot read property 'rerender' of undefined
at CoreView.extend.rerender (http://localhost:9000/bower_components/ember/ember.js:26575:33)
at null._controllerDidChange (http://localhost:9000/bower_components/ember/ember.js:26494:14)
at applyStr (http://localhost:9000/bower_components/ember/ember.js:7995:29)
at sendEvent (http://localhost:9000/bower_components/ember/ember.js:3320:13)
at notifyObservers (http://localhost:9000/bower_components/ember/ember.js:6226:9)
at propertyDidChange (http://localhost:9000/bower_components/ember/ember.js:6076:7)
at set (http://localhost:9000/bower_components/ember/ember.js:6493:13)
at Descriptor.ComputedPropertyPrototype.set (http://localhost:9000/bower_components/ember/ember.js:1708:11)
at set (http://localhost:9000/bower_components/ember/ember.js:6461:14)
at setupView (http://localhost:9000/bower_components/ember/ember.js:38915:7)"
}
我正在运行1.6.0-beta.5(但我在1.5.1中遇到了同样的问题)。有没有人经历过这个?
提前致谢。
更新
这是页面路径,控制器和视图:
App.PagesRoute = Ember.Route.extend({
model: function() {
return this.get('store').find('page');
}
});
App.PagesController = Ember.Controller.extend({});
App.PagesView = Ember.View.extend({});
答案 0 :(得分:3)
好的,所以这很令人尴尬......
在开发过程中,我在路径,控制器和视图的init方法中记录了一些东西,如下所示:
App.PagesAddRoute = Ember.Route.extend({
init: function() {
console.log('PagesAddRoute loaded');
}
});
这很糟糕......好吧,如果您想调试代码,但是如果您覆盖init
方法,请务必使用init
调用父this._super()
方法}:
App.PagesAddRoute = Ember.Route.extend({
init: function() {
console.log('PagesAddRoute loaded');
this._super(); // Ember.Route.init called, so route loads correctly.
}
});
这实际上是造成问题的原因......我首先记录内容的原因是因为我最初将模板放在/templates/page/add
而不是/templates/pages/add
。我的想法是我正在使用Object(页面)而不是Array(页面)......但是,文件系统应该与路由器匹配:
this.resource('pages', function() {
this.resource('page', { path: '/:slug' }, function() {
this.route('edit');
});
this.route('add'); // add sits within pages, so the path is pages/add
});
希望这可能仍然有助于某人。
答案 1 :(得分:1)
App.PagesAddView = Ember.Controller.extend({});
需要
App.PagesAddView = Ember.View.extend({});