我在Backbone Marionette應用程序中遇到了一個奇怪的情況。如果用戶點擊facebook/twitter鏈接,然後單擊瀏覽器後退按鈕,而不是重新加載我的應用程序,它只顯示json,如果我去example.com/posts.json
而不是example.com/posts
。如果用戶手動重新加載頁面,它會加載正常,但是讓用戶看到json非常混亂。後退按鈕不會重新觸發骨幹應用程序
如果我在example.com/posts
,然後手動導航離開說gmail.com
並單擊後退按鈕它工作正常。這似乎是當我的應用程序中的鏈接被點擊,這種情況出現。
任何想法如何我可以「強制」Backbone應用程序重新加載時,單擊返回按鈕導航回到我的應用程序?
編輯:
添加我的Rails控制器 - 它是擊中索引。但點擊返回按鈕,它似乎是觸發JSON主場迎戰HTML(雖然在同一頁面上刷新使其擊中正確的HTML)時:
class SurveysController < ApplicationController
# GET /surveys
# GET /surveys.json
def index
if cookies[:sample_user_id] && !User.find(cookies[:sample_user_id]).admin?
if !cookies[:sample_appuser_token]
appuser = Appuser.create
sign_in_appuser appuser
else
appuser = current_appuser
end
@surveys = User.find(cookies[:sample_user_id]).surveys.includes([:responses => [:choices], :questions => [:answers]])
else
if !cookies[:sample_appuser_token]
appuser = Appuser.create
sign_in_appuser appuser
else
appuser = current_appuser
end
@surveys = Survey.where(status: "Submitted")
if cookies[:sample_user_id]
User.find(cookies[:sample_user_id]).surveys.each do |survey|
@surveys << survey
end
end
end
end
而且index.html.erb視圖:
<div id="wrap">
<div id="header-region"></div>
<div id="main-region"></div>
<div id="push"></div>
</div>
<div id="footer-region"></div>
<div id="dialog-region"></div>
<%= debug(params) if Rails.env.development? %>
<%= javascript_tag do %>
$(function() {
Sample.start({
environment: "<%= Rails.env %>"
});
});
<% end %>
SurveysRouter:
@Sample.module "SurveysApp", (SurveysApp, App, Backbone, Marionette, $, _) ->
class SurveysApp.Router extends Marionette.AppRouter
appRoutes:
"" : "list"
":id" : "show"
":id/take": "take"
API =
list: ->
if $.cookie('sample_user_email') != null
new SurveysApp.List.Controller
else
window.location = "/signin"
show: (id) ->
window.fragment = Backbone.history.fragment
if $.cookie('sample_user_email') != null
new SurveysApp.Show.Controller
id: id
else
console.log Backbone.history.fragment
window.location = "/signin" + "#" + window.fragment
take: (id, survey) ->
new SurveysApp.Take.Controller
id: id
survey: survey
newSurvey: (surveys, survey) ->
if $.cookie('sample_user_email') != null
new SurveysApp.New.Controller
surveys: surveys
survey: survey
else
window.location = "/signin"
App.vent.on "survey:clicked", (survey) ->
App.navigate "/" + survey.id
API.show survey.id
App.vent.on "new:survey", (surveys, survey) ->
API.newSurvey surveys, survey
App.vent.on "take:survey:button:clicked", (survey) ->
App.navigate "/" + survey.id + "/take"
API.take survey.id, survey
App.vent.on "survey:list", ->
App.navigate "/"
API.list()
App.addInitializer ->
new SurveysApp.Router
controller: API
列表控制器:
@Sample.module "SurveysApp.List", (List, App, Backbone, Marionette, $, _) ->
class List.Controller extends App.Controllers.Application
initialize: ->
surveys = App.request "survey:entities"
App.execute "when:fetched", surveys, =>
@layout = @getLayoutView()
@listenTo @layout, "show", =>
@surveyRegion surveys
@bannerRegion surveys
@show @layout
App.request "header:footer"
surveyRegion: (surveys) ->
surveyView = @getSurveyView surveys
@listenTo surveyView, "childview:survey:clicked", (args) ->
if args.model.get('status') == "Draft"
App.vent.trigger "new:survey", surveys, args.model
else
App.vent.trigger "survey:clicked", args.model
@listenTo surveyView, "childview:take:survey:button:clicked", (child, args) ->
survey = args.model
survey.set(preview: true)
App.vent.trigger "take:survey:button:clicked", survey
@show surveyView, region: @layout.surveyRegion
getLayoutView: ->
new List.Layout
getSurveyView: (surveys) ->
new List.Surveys
collection: surveys
bannerRegion: (surveys) ->
bannerView = @getBannerView surveys
@listenTo bannerView, "new:survey:clicked", ->
App.vent.trigger "new:survey", surveys
@show bannerView, region: @layout.bannerRegion
getBannerView: (surveys) ->
new List.Banner
collection: surveys
和頁腳模板,其中鏈接:
<div class="container">
<div class="row">
<div class="col-sm-6 align-center">
<a href="/privacy" id="footer-privacy-link">Privacy</a>
<a href="/contact">Contact us</a>
<div>©2014 Sample, LLC</div>
</div>
<div class="col-sm-4 align-center">
<a class="facebook" href="https://www.facebook.com/sample"><i class="fa fa-facebook"></i></a>
<a class="twitter" href="https://twitter.com/sample"><i class="fa fa-twitter"></i></a>
<a class="email-link" href="/contact"><i class="fa fa-envelope"></i></a>
</div>
</div>
</div>
看到一些有問題的代碼會很有幫助。 – pdoherty926 2014-10-17 21:16:09