我在使用EmberJS创建基于ID的帖子的单个视图时遇到了问题,但是没有数组的ID,我实际上有一个ID来自我从Tumblr API获得的json。
因此ID类似于'54930292'。
接下来我尝试使用此ID来执行另一个jsonp来获取此id的帖子,如果你打开api并输入id,它会起作用,实际上如果你打开带有ID的单个url,也可以,问题是:
例如,在首页上点击链接转到单曲时,它什么也没有返回,并引发错误。
但是,如果您刷新页面,则会获得内容。
不知道如何修复和欣赏一些帮助:(
我把代码放在网上:http://tkrp.net/tumblr_test/
答案 0 :(得分:1)
您获得的错误是因为SingleRoute
生成为ArrayController
但json响应不是数组。
App.SingleController = Ember.ObjectController.extend({
});
进一步注意,使用model
和其他帮助程序时不会触发linkTo
挂钩。这是因为Ember假设如果链接到模型,则假定模型是指定的,并且它直接使用该模型调用setupController。在您的情况下,您仍需要加载单个帖子。我将setupController
添加到路由中以执行此操作。
App.SingleRoute = Ember.Route.extend({
model: function(params) {
return App.TKRPTumblr.find(params.id);
},
setupController: function(controller, id) {
App.TKRPTumblr.find(id)
.then(function(data) {
controller.set('content', data.response);
});
}
});
我稍微更改了单个帖子模板以反映json响应的方式。我做的最后一个改变是直接返回$.ajax
。 Ember直接理解jQuery承诺,因此您不需要进行任何解析。
以下是更新后的jsbin。
答案 1 :(得分:0)
我修改了:http://jsbin.com/okezum/6/edit 这是为了“修复”刷新单页错误:
setupController: function(controller, id) {
if(typeof id === 'object'){
controller.set('content', id.response);
}else{
App.TKRPTumblr.find(id)
.then(function(data) {
controller.set('content', data.response);
});
}
}
修改了setupController,因为我在刷新页面时获取了一个对象,而在单击linkTo
不知道这是否是最佳方式:s