backbone js, ошибка маршрутизации и автоматическое изменение URL-адреса

У меня проблема с маршрутизацией магистрали. Я вызываю Backbone.history.start() в индексе продуктов (localhost:3000/products). Маршруты:

'': 'product_index'  
':id': 'product_show' (tag 'a' link 'localhost:3000/products#123')
':id/items/:item_id': 'item_show' (tag 'a' link 'localhost:3000/products#123/items/456')

Примечание: все теги имеют data-ajax = 'false' и имеют некоторую конфигурацию:

$(document).bind('mobileinit', function() {
        $.mobile.ajaxEnabled = false;
        $.mobile.linkBindingEnabled = false;
        $.mobile.hashListeningEnabled = false;
        $.mobile.pushStateEnabled = false;
      });

Ошибка возникает, когда я нахожусь на странице «localhost/products#123» и нажимаю тег «a» на ссылку «localhost:3000/products#123/items/456». Он предупреждает «Ошибка загрузки страницы», затем URL-адрес автоматически изменяется на «localhost: 3000/123/items/456», а в консоли появляется ошибка: «GET localhost: 3000/123/items/456 404 (Not Found)».

Мой файл маршрутов:

class Braindu.Routers.Mobile extends Backbone.Router
  initialize: (options) ->
    @products = new Braindu.Collections.Products()
    @products_view = new Braindu.Views.MobileProductsIndex(collection: @products, id_product_el:'product-index-page')

  routes:
    ''    : 'product_index'
    ':id' : 'product_show'
    ':id/items/:item_id': 'item_show'


  product_index: ->
    @product_index_view.render()

  product_show:(id) ->
    $.mobile.changePage( "#product-show-page" , { reverse: false, changeHash: false } )
    current_product_model = @product_index_view.product_collection.where({_id: id})[0]
    if current_product_model != null && current_product_model != undefined
      @product_index_view.render_current_product(current_product_model)

  item_show:(id, item_id)->
    console.log 'item showwwwwwwwwwwwwwwwwwwwwwww'
    $.mobile.changePage( "#object-card-page" , { reverse: false, changeHash: false } )

person Peter89    schedule 19.06.2013    source источник
comment
пожалуйста, поделитесь своим кодом маршрутизации, а также где вы делаете вызов GET.   -  person Harish    schedule 19.06.2013
comment
Я добавляю функциональный маршрут. пожалуйста, посмотри   -  person Peter89    schedule 19.06.2013


Ответы (1)


Когда вы вызываете localhost:3000/123/items/456, вы вызываете функцию ниже?

 product_show:(id) ->
    $.mobile.changePage( "#product-show-page" , { reverse: false, changeHash: false } )
    current_product_model = @product_index_view.product_collection.where({_id: id})[0]
    if current_product_model != null && current_product_model != undefined
      @product_index_view.render_current_product(current_product_model)

если это так, отладьте и узнайте значение идентификатора для меня, пожалуйста.

Спасибо

person Harish    schedule 19.06.2013
comment
Ошибка возникает, когда я нахожусь на странице «localhost/products#123» и нажимаю тег «a» с href «localhost:3000/products#123/items/456». Он не переходит к функции item_show. Функция product_show работает нормально, значение идентификатора: 123. - person Peter89; 19.06.2013
comment
Попробуйте выполнить этот ответ, но все равно получите ошибку. stackoverflow.com/questions/10870948/ - person Peter89; 20.06.2013
comment
Вы вообще используете свойство навигации для навигации? appFsMvc.App.navigate(создать, {триггер: true}); - person Harish; 20.06.2013
comment
Я не знаю, для чего используется навигация. Я просто вызываю Backbone.history.start(). И я использую гем «backbone-on-rails» - person Peter89; 21.06.2013
comment
Я добавляю маршрут: «тест» (localhost: 3000/products#test) выполняется нормально. но «test/abc» (localhost: 3000/products#test/abc) является ошибкой, как указано выше. Я пропустил какую-то конфигурацию для магистрали или для мобильных устройств?? - person Peter89; 21.06.2013
comment
Ааа, я удаляю jquery.history, он отлично работает на ПК. Таким образом, ошибка заключается в отсутствующей или неправильной конфигурации jquery mobile. Пожалуйста, взгляните на мобильную инициализацию выше и сообщите мне, если вы обнаружите что-то не так. Спасибо - person Peter89; 21.06.2013
comment
Наконец, удалите jquery.history.js, обновите версию jquery.mobile.js и поместите конфигурацию перед требованием jquery.mobile. Теперь работает нормально. Большое спасибо @codeinzone. :) :) :) :) - person Peter89; 21.06.2013