我有一个带有插座的根模板,然后是一个嵌套的动态资源。当您在根视图的输入中输入名称时,ajax 请求将异步检索嵌套动态资源的模型并使用来自该模型的信息呈现模板。当我从根目录开始并使用输入调用嵌套资源时,一切正常。
所以一切都很完美,嵌套资源更新了 url,但是当我刷新或将 url 粘贴到导航栏中时,我只会得到一个空白页面。没有错误,但根本没有 HTML。我已验证 ajax 请求成功并且我的模型已创建。据我所知,根模板没有被渲染,所以我的嵌套模板无处可去。
我认为 ember 应该使这变得简单和自动化,当我直接进入嵌套路由时,如何使根模板呈现?
这是路由器:
App.Router.map(function() {
this.resource('app', {path: '/'}, function(){
this.resource('user', {path: ':screen_name'});
});
});
App.IndexRoute = Ember.Route.extend({
setupController: function(controller, model) {
this.controllerFor('app');
}
});
App.UserRoute = Ember.Route.extend({
model: function(params) {
var that = this;
var promise = Ember.$.getJSON('/users/new?screen_name=' + params['screen_name']);
promise.then(fulfill, reject);
function fulfill (answer) {
return that.store.createRecord('user', answer);
}
function reject (reason) {
console.log("failure");
return false;
}
return promise;
},
serialize: function(user) {
return {screen_name: user.get('user.screen_name')};
}
});
这是AppController
:
App.AppController = Ember.ObjectController.extend({
actions: {
findUser: function(){
var that = this;
var name = that.get('screen_name');
that.set('screen_name', '');
that.transitionToRoute('user', name);
}
},
screen_name: ''
});
App.AppIndexController = Ember.ObjectController.extend({
needs: "app",
app: Ember.computed.alias("controllers.app")
});
这是UserController
:
App.UserController = Ember.ObjectController.extend({
needs: "app",
backgroundPic: function(){
return this.get('model.user.profile_banner_url');
}.property('model.user.profile_banner_url'),
profilePic: function(){
return this.get('model.user.profile_image_url');
}.property('model.user.profile_image_url')
});
这是user
模型,它只接受 AJAX 请求返回的 JSON 对象:
App.User = DS.Model.extend();