EmberJS获得JSONP的“单身”路线

时间:2013-06-27 20:53:15

标签: api ember.js jsonp tumblr router

我在使用EmberJS创建基于ID的帖子的单个视图时遇到了问题,但是没有数组的ID,我实际上有一个ID来自我从Tumblr API获得的json。

因此ID类似于'54930292'。

接下来我尝试使用此ID来执行另一个jsonp来获取此id的帖子,如果你打开api并输入id,它会起作用,实际上如果你打开带有ID的单个url,也可以,问题是:

例如,在首页上点击链接转到单曲时,它什么也没有返回,并引发错误。

但是,如果您刷新页面,则会获得内容。

不知道如何修复和欣赏一些帮助:(

我把代码放在网上:http://tkrp.net/tumblr_test/

2 个答案:

答案 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