我正在尝试使用wait:true选项来处理collection.create(模型)并且没有任何运气。
要在添加
上呈现的视图window.ObjectsView = GreyboxView.extend
initialize: function() {
_.bindAll(this, 'render');
this.collection.bind('add', this.render);
return this.collection.bind('reset', this.render);
},
render: function() {
json = { obj removed }
this.template = _.template(JST['irboards/index'](json));
this.$el.html(this.template());
this.renderObjects();
return this;
}
}
关于模型保存(新)
window.FormView = GreyboxView.extend({
// un-needed code omitted
saveModel: function() {
this.model.set { all my attributes }
this.collection.create(this.model, {
wait: true
});
}
}
在rails controller中:
def create
@model = Model.new(params[:model].merge({:account_id => current_user.account.id, :action_user_id => current_user.id}))
if @model.save
flash[:success] = AppSystem::Notifications.created('Model')
respond_with @model.to_json
else
flash[:error] = @model.errors[:base].blank? ? AppSystem::Notifications::FORM_ERROR : @model.errors[:base]
render :action => :new
end
end
基本上{wait:true}什么都不做......要么没有将js模型添加到集合中,要么b / c保存到数据库或
this.collection.bind('add', this.render)
没有被触发或者轨道没有恢复成功......我真的不知道。
有人可以帮忙吗?
提前谢谢
显然我还不能回答我自己的问题,但我不想忘记这个b / c我知道它会帮助别人。这样:
嗯......经过很长一段时间的搜索,最后发布了这个问题......我发现了解决这个问题的方法。我找到了这篇文章/博客
http://italktoomuch.com/2012/05/setting-up-backbonejs-with-ruby-on-rails/
基本上我的创建:动作需要
def create
respond_with = Model.create(params0
end
和js是:
this.collection.create(attributes, {
wait: false,
success: function() {
return _this.collection.trigger('reset');
},
error: function() {
return alert('wrong!');
}
})
所以我离开了相信等待什么都没做?或者我只是错误使用它?我不知道,但这很有效,我很高兴。需要做一些重构,但这是一个开始的好地方
希望这也有助于其他人
答案 0 :(得分:1)
{wait:true}
当然有所作为! : - )
我对rails一无所知,但我认为这可能是问题所在。基本上,当您通过选项wait:true
时,主干将在创建或销毁模型之前等待服务器响应,从而仅在验证资源已保存或删除后才在集合中添加或删除它。
因此,使用wait:true
的重要组成部分是确保您的服务器响应包含正确的HTTP状态。如果OKAY和400之类的话,返回200的状态,如果不是,则返回500。挑选一下。我不太确定你的代码是否这样做,尽管这是要检查的东西。
进一步注意,似乎您在代码中添加了成功和错误回调。基本上这也是Backbone知道是否调用成功或错误的方式。 200,它执行成功。其他任何东西都会运行错误。
默认情况下(当前)Backbone是乐观的,这意味着如果你没有传递任何东西(或wait:false
),Backbone会认为一切都会好起来的。因此,在从服务器获得响应之前,它会触发您添加或销毁事件。