Я пытаюсь настроить мою index.html.erb (корневую страницу), чтобы я мог видеть два элемента. Форма «новый пост» и форма «новый пользователь». Я пытаюсь получить кнопку отправки формы для перехода на страницу показа после создания пользователя (или сообщения). Он не работает на корневой странице - он просто меняет URL на «localhost: 3000/#/x», где «x» - это идентификатор пользователя (или сообщения), но страница не изменяется. Однако, когда я перехожу к «localhost: 3000/users», а затем попытаюсь создать пользователя, он изменится, чтобы показать страницу показа пользователей. Это имеет смысл для меня в некотором роде (я не могу сказать, почему ... что-то делать с маршрутизацией и быть «внутри» приложения?). Я просто хочу, чтобы кнопка отправки внесла изменения на страницу показа при использовании с корневой страницы (опять же ... она отлично работает, когда я «внутри» приложения). Я только размещаю код «posts», код «users» идентичен, за исключением того, что появляется «post» или «posts», это будет «пользователь» или «пользователь», соответственно. Вот код:показать страницу показа на submit backbone.js + rails + rails-backbone gem
new_view.js.coffee
Example.Views.Posts ||= {}
class Example.Views.Posts.NewView extends Backbone.View
template: JST["backbone/templates/posts/new"]
events:
"submit #new-post": "save"
constructor: (options) ->
super(options)
@model = new @collection.model()
@model.bind("change:errors",() =>
this.render()
)
save: (e) ->
e.preventDefault()
e.stopPropagation()
@model.unset("errors")
@collection.create(@model.toJSON(),
success: (post) =>
@model = post
window.location.hash = "/#{@model.id}"
error: (post, jqXHR) =>
@model.set({errors: $.parseJSON(jqXHR.responseText)})
)
render: ->
$(@el).html(@template(@model.toJSON()))
this.$("form").backboneLink(@model)
return this
Я пытался возиться с функцией «сохранить» - я играл с «window.location.hash». Я также попытался создать метод, называемый «показом» в представлении, и использовал его для «router.navigate», чтобы сделать переключатель. Затем я добавил «this.display()» в функцию «save» (сразу после строки «window.location.hash»). Он изменил URL-адрес на то, что я хотел, чтобы он был ... но все же не переключатель страницы (с корневой страницы).
posts_router.js.coffee
class Example.Routers.PostsRouter extends Backbone.Router
initialize: (options) ->
@posts = new Example.Collections.PostsCollection()
@posts.reset options.posts
routes:
"new" : "newPost"
"index" : "index"
":id/edit" : "edit"
":id" : "show"
".*" : "index"
newPost: ->
@view = new Example.Views.Posts.NewView(collection: @posts)
$("#posts").html(@view.render().el)
index: ->
@view = new Example.Views.Posts.IndexView(posts: @posts)
$("#posts").html(@view.render().el)
show: (id) ->
post = @posts.get(id)
@view = new Example.Views.Posts.ShowView(model: post)
$("#posts").html(@view.render().el)
edit: (id) ->
post = @posts.get(id)
@view = new Example.Views.Posts.EditView(model: post)
$("#posts").html(@view.render().el)
post.js.coffee
class Example.Models.Post extends Backbone.Model
paramRoot: 'post'
defaults:
title: null
content: null
class Example.Collections.PostsCollection extends Backbone.Collection
model: Example.Models.Post
url: '/posts'
index.html.erb (корневая страница)
<div id="container">Loading...</div>
<script type="text/javascript">
$(function() {
window.newView = new Example.Views.Users.NewView({model: <%= @users.to_json.html_safe -%>,collection: new Example.Collections.UsersCollection()});
window.router = new Example.Routers.UsersRouter({users: <%= @users.to_json.html_safe -%>});
var postView = new Example.Views.Posts.NewView({model: <%= @posts.to_json.html_safe -%>,collection: new Example.Collections.PostsCollection()});
$('body').html(newView.render().$el);
$('body').append(postView.render().$el);
Backbone.history.start({pushState: true});
});
</script>
ли нужен маршрутизатор сообщений ? У меня создается впечатление, что у вас может быть только один «активный» маршрутизатор.
Заранее спасибо за любую помощь, я буду обращать внимание на сообщение - я отвечу в течение нескольких минут после комментария.
UPDATE
ли example.js.coffee иметь ничего общего с ним?
#= require_self
#= require_tree ./templates
#= require_tree ./models
#= require_tree ./views
#= require_tree ./routers
window.Example =
Models: {}
Collections: {}
Routers: {}
Views: {}
У вас есть 'Example.Views.Posts' правильно инициализированный? Я имею в виду, что у вас есть 'Example = {}', 'Example.Views = {}' и 'Example.Views.Posts = {}' – juanpastas
То же самое для ваших других пространств имен – juanpastas
Я не уверен, что я следую ... Я ' m не совсем уверен, что эти строки делают ... – ewizard