【发布时间】:2014-06-13 03:34:07
【问题描述】:
我是 Backbone 的新手,所以希望我只是缺少一些简单的东西。我正在构建一个简单的调查创建/调查应用程序来处理嵌套模型等。我正在为后端运行一个安静的 Rails 服务器。
不过,我正在努力将调查模型保存到服务器。似乎没有实际发生发布请求,因此它实际上并没有得到更新。有什么我想念的想法吗?
调查模型:
class SurveyMe.Models.Survey extends Backbone.Model
调查编辑视图:
class SurveyMe.Views.SurveyEdit extends Backbone.View
template: JST['templates/surveys/survey_edit']
initialize: ->
@model.on('all', @render, this)
events: {
'click #back': 'back'
'submit #survey': 'update'
}
render: ->
$(@el).html(@template(survey: @model))
this
back: ->
Backbone.history.navigate("surveys",true)
update: ->
@model.set("title", $('#title').val())
@model.set("survey_limit", $('#survey_limit').val())
@model.save()
Backbone.history.navigate("surveys",true)
调查编辑模板:
<h1>Edit Survey</h1>
<form id="survey">
<div class="input-group">
<span class="input-group-addon">Title:</span>
<input id="title" type="text" class="form-control" value="<%= @survey.get('title') %>">
<br>
</div>
<br>
<div class="input-group">
<span class="input-group-addon">Desired Responses:</span>
<input id="survey_limit" type="text" class="form-control" value="<%= @survey.get('survey_limit') %>">
<br>
</div>
<hr>
<button class="btn" id="back">Back</button>
<input type="submit" class="btn" id="update" value="Update">
</form>
编辑:添加索引/路由器/集合
索引:
class SurveyMe.Views.SurveysIndex extends Backbone.View
template: JST['templates/surveys/index']
events:
'submit #survey':'createSurvey'
initialize: ->
@collection.on('reset', @render, this)
@collection.on('add', @addSurvey, this)
render: ->
$(@el).html(@template())
@collection.each(@addSurvey)
console.log(@collection.length)
this
addSurvey: (survey) ->
view = new SurveyMe.Views.Survey(model: survey)
@$('#surveys').append(view.render().el)
createSurvey: ->
console.log("Survey created")
路由器:
class SurveyMe.Routers.Surveys extends Backbone.Router
routes:
'surveys/:id': 'edit',
'surveys': "index"
initialize: ->
@collection = new SurveyMe.Collections.Surveys()
@collection.fetch(reset: true)
index: ->
view = new SurveyMe.Views.SurveysIndex(collection: @collection)
$("#container").html(view.render().el)
edit: (id) ->
survey = @collection.get(id)
view = new SurveyMe.Views.SurveyEdit(model: survey)
$("#container").html(view.render().el)
收藏:
class SurveyMe.Collections.Surveys extends Backbone.Collection
model: SurveyMe.Models.Survey
url: '/surveys/'
【问题讨论】:
-
您能否在您的编辑路线中进行一些调试,看看以下两件事是否属实:@ 已定义且调查已正确找到。
-
@ 作为对象返回,并且随着survey.get('title') 拉回标题,似乎可以正确找到调查
-
在您的 createSurvey 方法中,您可以在那里放置一个调试器语句。似乎您需要抓住事件并停止传播;当您提交表单时,调试器将再次确认您声明该方法没有被调用。
标签: javascript jquery backbone.js backbone-views