2013-07-16 73 views
2

我們正試圖移動我們的一些應用程序以使用骨幹和品牌。我設置了REST API,它正在處理一些基本示例。然而,有些情況下,我們目前發佈一個Ajax請求的自定義URL的幾個問題,並在該視圖做幾件事情像當使用Django,Backbone和Tastypie處理REST API時,相關邏輯在何處進行模型創建?

  • 進行有關對象
  • 調用一些相關的功能

但是,現在我已將這些功能切換爲使用主幹和REST API,但我不確定所有這些應該去哪裏!

例如,我有一個想法來製作一個Message,當我製作一個Message時,我也製作了一個Notification並調用了一個函數來爲用戶添加一些點。類似於

def ajax_send_message(request): 
    ## ... set up some variables ... 
    ## Make the new message 
    message = Message(user=user, content=message) 
    message.save() 

    ## Make the notification 
    notification = Notification(message=message) 
    notification.save() 

    ## Give the user points 
    user.add_points_for_message(); 

    return json_response({"status": "ok"}) 

現在 - 我只是應該這樣做所有的JavaScript?我也有一個Message骨幹模型。

// Create message backbone object 
var msg = new Message({content:content, user: user}); 

// Post to server 
msg.save(); 

// Add to backbone collection 
messages.add(msg); 

我看tastypie的不同部位,它似乎可以創建自定義URL端點,並做驗證,但是,這並不似乎是合適的地方來調用相關的方法。看起來,調用相關方法違背了REST部分---但是他們應該去哪裏?

如果我只想在創建對象時向骨幹添加一些邏輯,那麼它會去哪裏?

回答

2

我建議的第一件事是將您的思維轉換爲基於事件的模型,其中您的代碼對事件作出反應。在上面的示例中,將模型保存到服務器,然後立即將其添加到集合中。你怎麼知道模型保存正確?程序風格的編程在同步的服務器端編程風格下工作得更好。

在客戶端編程的異步世界中,您發出請求,然後設置回調函數,根據您正在監聽的事件確定接下來會發生什麼。在你的情況下,你想在郵件成功保存時以某種方式作出反應,對嗎?您可以定義一個成功回調爲您保存操作,像這樣:

msg.save({ 
    success: function(model, response, options) { 
     messages.add(model); 
     // code to add notification 
     // code to add points 
    } 
}); 

基本上,你說:「我想保存此模型,然後聽一個成功事件當事件到來時,執行以下代碼「。另請注意,我將從API返回的模型添加到集合中,因爲這是保存到服務器的確切對象,所以添加比創建的模型更合適。

相關問題