這可能更多的是圍繞設計模式的問題 - 我希望它是有道理的。視圖中的回調
我正在使用骨幹 - 我正在開發一個相對簡單的應用程序,用戶可以在其中添加請求(請求模型只是標題,說明和價格)。添加請求的唯一要求是用戶已「登錄」。
但是,我希望用戶在檢查用戶是否登錄(刪除一個屏障)之前'添加'請求。我的意思是說,用戶填寫表格,如果沒有註冊,他們必須註冊,然後請求被髮送,如果他們登錄,它只會被髮送。所以最初呈現'添加請求'視圖,當保存被觸發時,這將調用在服務器上調用ajax請求的模型上的保存。響應將返回true(用戶已登錄並添加了請求)或false(用戶未登錄)。
因此,假設用戶沒有登錄 - 那麼我希望呈現一個新的視圖'註冊',它有用戶切換到'登錄'(另一個視圖)的選項。所以,用戶在理論上可以從
Request (save) -> Register -> Login -> Request (save)
去那麼假設該用戶隨後註冊(填寫表格,然後叫寄存器查看保存方法,然後叫寄存器模式保存並返回OK)。然後我想再次調用'請求'保存方法(因爲現在用戶會登錄)。然而,我不希望註冊/登錄綁定到請求視圖 - 理論上一個新的視圖(可以說我有一個發送的消息視圖)會想要類似的功能,例如嘗試提出請求,如果註冊失敗的交換機視圖 - 執行保存,然後調用一些回調。
所以問題是這樣做的正確方法是什麼?
1)我是否在引用'save'函數的請求視圖中創建了一些閉包,並將其存儲在全局變量中,並通過register/login onsuccess調用? 2)創建一個閉包如上,並將其傳遞給寄存器等(如果是的話,我怎麼會通過這個給定的註冊/登錄是一個視圖)。 3)通過引用請求視圖的'this'?
到目前爲止,我所擁有的只是在其他方面,我會呈現'註冊'視圖,但很想知道最好的方法來做到這一點,而不會變得非常醜陋?
save : function(event){
if(this.model.isValid() == true) {
this.$("#general_error").hide();
this.model.set({'formattedPrice' : TB_H.formatPrice(this.model.get('currency'), this.model.get('price'))});
self = this;
this.model.save(this.model.toJSON(), {
success: function(m, y) {
if(y.status == true) {
self.model = new TB_BB.Request();
Backbone.ModelBinding.bind(self);
Backbone.Validation.bind(self);
$('#add-offer-button').show();
} else {
if(y.errors[0] == 'not logged in') {
this.$("#general_error").html('You are not logged in');
this.$("#general_error").show();
} else {
_.each(y.errors, function(key, val) { this.$("#general_error").html(key) });
this.$("#general_error").show();
}
}
}, error : function(m,y) {
this.$("#general_error").show();
this.$("#general_error").html("Something bad happened - please try again")
}
}
);
}
非常感謝您的幫助!
你是如何完成這個工作的?我遇到了類似的事情 – bijanv