2013-06-27 2 views
1

У меня возникли проблемы с EmberJS, чтобы создать единый просмотр сообщений на основе ID, но не идентификатор массива, у меня на самом деле есть идентификатор, который поставляется с json, который я получил от Tumblr API.EmberJS Route to 'single' получение JSONP

Таким образом, идентификатор является чем-то вроде «54930292».

Далее я пытаюсь использовать этот идентификатор, чтобы сделать еще один jsonp, чтобы получить сообщение для этого id, он работает, если вы откроете api и поместите идентификатор, и на самом деле, если вы откроете единственный URL с идентификатором на нем, тоже проблема заключается в следующем:

Когда на первой странице, например, я нажимаю ссылку, чтобы перейти к синглу, она ничего мне не возвращает и вызывает ошибку.

Но если вы обновите страницу, вы получите контент.

Не знаю, как исправить и оценить некоторую помощь :(

Я выкладывайте код: http://tkrp.net/tumblr_test/

+0

Я бы легче помочь, если вы переместили код на [jsbin] (http://www.jsbin.com), чтобы жить редактирование, отладки и т.д.. –

+0

Извините, здесь: http://jsbin.com/okezum/2/edit: D –

ответ

1

Ошибка вы получаете было, потому что SingleRoute был генерируется как ArrayController но JSON ответ не был массив.

App.SingleController = Ember.ObjectController.extend({ 

}); 

Далее отметим, что model крюк не вызывается при использовании linkTo и других помощников. Это потому, что Эмбер предполагает, что если вы связаны с моделью, предполагается, что модель соответствует указанному, и она напрямую вызывает 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.

+0

Большое спасибо за помощь! Поэтому, если я снова получу эту ошибку в другом контроллере, мне просто нужно указать Ember, говоря, что это объект или другой вид, а затем setupController правильно? –

+1

Добро пожаловать! Это зависит, но для использования привязки ember вы обычно хотите один из ObjectController или ArrayController. –

+0

Хорошо: D хорошо, и о контроллере.set, почему вы использовали data.respose вместо этого только данные или data.posts, чтобы отправлять сообщения и как Ember получает ровно сообщение из этого? Я пытаюсь отлаживать эту часть, чтобы узнать, что происходит haha ​​ –

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

не знаю, если это лучший способ сделать это: ■