【发布时间】:2011-11-10 10:18:31
【问题描述】:
我有一个Backbone.js 模型,当用户单击模型视图中的链接时,我试图销毁它。视图是这样的(伪代码,因为它是在CoffeeScript 中实现的,可以在问题的底部找到)。
var window.ListingSaveView = Backbone.View.extend({
events: {
'click a.delete': 'onDestroy'
},
onDestroy: function(event){
event.preventDefault();
this.model.destroy({
success: function(model, response){
console.log "Success";
},
error: function(model, response){
console.log "Error";
}
});
}
});
当我在浏览器中单击delete 链接时,我总是将Error 记录到控制台,即使我的服务器记录了相关数据库记录的成功销毁并返回了 200 响应。当我刷新页面(导致集合从数据库重新渲染)时,我删除的模型将消失。
有趣的是,当我在错误回调中记录response 时,它的状态码200 表示成功,但它也报告statusText: "parseerror",不管这意味着什么。我的服务器日志中没有错误。
我做错了什么?
这是来自服务器的响应:
Object
abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
isRejected: function () {
isResolved: function () {
overrideMimeType: function ( type ) {
pipe: function ( fnDone, fnFail ) {
promise: function ( obj ) {
readyState: 4
responseText: " "
setRequestHeader: function ( name, value ) {
status: 200
statusCode: function ( map ) {
statusText: "parsererror"
success: function () {
then: function ( doneCallbacks, failCallbacks ) {
__proto__: Object
这里是销毁与 (Ruby on Rails) 交互的服务器操作
# DELETE /team/listing_saves/1.json
def destroy
@save = current_user.team.listing_saves.find(params[:id])
@save.destroy
respond_to do |format|
format.json { head :ok }
end
end
下面是 Backbone 视图的实际 CoffeeScript 实现,供喜欢这样的人使用:
class MoveOutOrg.Views.ListingSaveView extends Backbone.View
tagName: 'li'
className: 'listing_save'
template: JST['backbone/templates/listing_save']
events:
'click a.delete_saved': 'onDestroy'
initialize: ->
@model.bind 'change', this.render
render: =>
renderedContent = @template(@model.toJSON())
$(@el).html(renderedContent)
this
onDestroy: (event) ->
event.preventDefault() # stop the hash being added to the URL
console.log "Listing Destroyed"
@model.destroy
success: (model, response)->
console.log "Success"
console.log model
console.log response
error: (model, response) ->
console.log "Error"
console.log model # this is the ListingSave model
console.log response
【问题讨论】:
-
如果有的话,你能粘贴服务器发回的任何东西(使用 firebug 或其他东西打开响应)吗?
-
编辑了我的问题以包含响应
-
哦。好吧,坦率地说..这不是一个有效的回应。它很可能在侦听 JSON 响应.. 并且不知何故你没有给它一个。我不记得我们在工作中为 rails 使用了什么,但它类似于 to_json,而不仅仅是 'json'(我不是 ruby 专家.. 甚至是新手.. 所以我忍不住过去了)跨度>
-
好吧,我想通了。 Backbone 似乎期望 JSON 响应是已销毁记录的 JSON 序列化。然而,Rails 控制器生成器默认只返回
head :ok。我将 JSON 响应更改为render json: @listing_save,其中@listing_save是我刚刚销毁的记录,它注册成功。 -
您确定您的网址吗?我的意思是您是否在 Backbone.Model url 的末尾附加了
.json?由于您在服务器端 (respond_to do |format| ... end) 进行了检查,因此您可能无法发送正确的 `head :ok` 响应...
标签: javascript ruby-on-rails ruby-on-rails-3 backbone.js javascript-framework