2012-08-17 114 views
0

我想獲得等待:真正的選項工作collection.create(模型),我沒有任何運氣。骨幹和鐵軌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 
    }); 
    } 
} 
在軌控制

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 

基本上{等待:真正}什麼也不做...或者js模型沒有被添加到集合中,它保存到數據庫或者

this.collection.bind('add', this.render) 

沒有被觸發或者rails沒有返回成功......我不知道。

任何人都可以幫忙嗎?

預先感謝您


顯然,我不能回答我的問題,但我不想忘記這個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!'); 
    } 
}) 

所以我是留給相信等待什麼也沒做?或者我只是使用它錯了?我不知道,但這是工作,我很高興。需要做一些更多的重構,但是這是開始

希望這有助於其他人也

回答

1

{wait:true}肯定做了一個好地方! :-)

我不知道任何有關軌道,但這是我認爲可能是問題。基本上,當您通過選項wait:true時,主幹將在創建或銷燬模型之前等待服務器響應,因此只有在確認資源已保存或刪除後,才從集合中添加或刪除它。

因此,使用wait:true的重要組件是確保您的服務器響應包含正確的HTTP狀態。如果OKAY和400之類的話返回狀態200,如果不是則返回500。選一個。我不太確定你的代碼是否執行此操作,儘管它需要檢查。

要進一步注意,似乎您已將成功和錯誤回調添加到您的代碼。基本上,這也是Backbone知道是否稱爲成功或錯誤。 200並執行成功。任何其他和它運行錯誤。

默認情況下(當前)Backbone是樂觀的,這意味着如果你什麼都沒有通過(或者wait:false),骨幹會認爲一切都會好起來的。因此,它會在從服務器獲得響應之前觸發添加或銷燬事件。