2013-08-05 3 views
1

У меня есть один основная домашняя страница в моем приложении и другой странице для каждой должности, которые могут быть доступны через список отображается на главной странице ..Backbone Collection получить (идентификатор) метод

это как мой маршрутизатор выглядит :

var AppRouter = Backbone.Router.extend({ 

    initialize: function(){ 
     this.model = new model(); 
     this.collection = new collection(); 
    }, 


    routes: { 
     "" : "showForm", 
     "post/:id" : "showPost" 
    }, 


    showPost: function(id){ 
     var curmodel = this.collection.get(id); 
     var post = new postView({model:curmodel}); 
     post.render(); 
     $(".maincontainer").html(post.el); 

    }, 

    showForm : function(){ 
     var qcView = new qcV({model:this.model, collection:this.collection}); 
     qcView.render() 
     $(".maincontainer").html(qcView.el); 
    } 
}); 

это то, что одна из ссылок на посты в этом списке выглядит

<h2><a id= "<%=_id%>" href="#post/<%=_id%>"><%=name%></h2></a> 

мой первый вопрос: является ли это опасно связывать страницы с хэш на основе URL в этом манера?

мой второй вопрос: у меня нет проблем с навигацией к просмотру сообщений, если я нажму одну из ссылок на моей домашней странице. Я мой url успешно изменяет что-то вроде http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034 и визуализируется конкретное сообщение. Однако в этот момент, если я обновляю страницу, или если я непосредственно набираю http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034 в моей строке URL, метод this.collection.get(id) в моем методе showPost в маршрутизаторе возвращает undefined. Может ли кто-нибудь помочь мне разобраться, почему это так?

Я проверил несколько раз, что мой метод инициализации вызывается как раз, и моя коллекция и модель успешно

ответ

3

для # 2, вы, скорее всего, не выборка коллекции на «пост» маршрут. Попробуйте собрать коллекцию (если она не существует), а затем вызовите рендер. Это должно делать свое дело!

+0

Это действительно интересно, потому что коллекция существует, я вижу ее, когда печатаю ее в своей консоли. Я даже вижу модель, которую я ищу. –

+0

Мы, очевидно, пропустили что-то важное. Где вы извлекаете данные? –

2

Я думаю @ Trunal на правильном пути для второго вопроса. Для первого нет, это не «опасно». Вы не делаете ничего другого, кроме как с классическим серверным приложением, передавая информацию на сервер через GET для получения информации. На мой взгляд, это должен быть предпочтительный подход к реализации маршрутов (вместо того, чтобы пытаться запускать backbone.history.navigate вручную, так как он избегает всех видов настроек и событий, которые могут возникнуть в противном случае).

+0

спасибо за ваш ответ, но я уверен, что что-то происходит со вторым вопросом. даже если я попытаюсь открыть ссылку на новой вкладке из списка, она не отображает сообщение –

+0

@trunal жаль, что вы, ребята, были абсолютно правы .. Мне просто пришлось поместить мой код внутри this.collection.fetch(). complete (function() {}); –

+0

круто, рад, что я смог помочь! –