2014-03-12 24 views
0

我使用Django和prototype.js爲Ajax風格的Web應用程序。我已經有了一些經驗,但一般來說,在網絡編程領域仍然是一個新手。在Django Ajax Web應用程序中處理類似的功能,但從不同的頁面來源

我設計我的web應用程序中,這種行爲(我認爲這是直線前進):

的HTML頁面是由代表與用戶交互的不同模塊的多個DIV元素的。有些鏈接指向Javascript函數(「onclick」),後者又通過Ajax請求調用Django服務器框架。這將在Django框架中執行視圖方法,它執行一些功能性的東西(更改數據庫中的數據),然後更新用戶點擊鏈接的頁面的相關部分(div)。

到目前爲止這麼好。

現在的問題是,我發現自己面臨的事實是不同部分的不同鏈接應該做相同的功能的東西,但應更新不同的div作爲他們被調用的地方的功能。

例如: 我有一個部分或頁面A,其中有一個用戶的所有訂單的列表。 應該有一個鏈接取消它旁邊的訂單。 點擊它應取消訂單(功能的東西),然後更新頁面A中的訂單列表。

還有另一個頁面B,我有一個特定字段的訂單列表。 同樣應該可以通過點擊鏈接取消。 它應該執行與上面相同的功能,但現在使用字段列表的順序更新頁面B.

我想知道如何分解常見的功能性東西。

簡易方法是有 頁的鏈接 - >的onclick(cancelOrderA) - > JS:cancelOrderA() - > Ajax請求URL/cancelOrderA - >的Django視圖函數A - >呈現新網頁A 頁乙鏈接 - > onclick(cancelOrderB) - > js:cancelOrderB() - > Ajax請求url/cancelOrderB - > Django視圖函數B - >呈現新頁面B

所以我發現自己寫所有這些函數(JavaScript和Django視圖),雖然它執行相同的功能代碼。

當然,我可以編寫一個封裝了通用功能代碼的python函數。 但我覺得我仍然需要從上面的所有不同的膠水功能。 我需要一個專門的Django-url和每個動作的視圖嗎? 每個動作都需要專用的Javascript函數嗎?

我在這裏有誤會嗎? 你們如何處理這種情況?

回答

0

你可以抽象你的調用JavaScript函數和你的觀點是更通用?

E.g.

// before 
var cancelOrderA = function(...) { 
    // ... 
    $.ajax({ 
     type: 'POST', 
     url: '/path/to/cancelOrderA', 
     data: { ... }, 
     }, 
}); 

var cancelOrderB = function(...) { 
    // ... 
    $.ajax({ 
     type: 'POST', 
     url: '/path/to/cancelOrderB', 
     data: { ... }, 
     }, 
}); 

...變爲:

var cancelOrder = function(order_type, ...) { 
    // ... 
    $.ajax({ 
     type: 'POST', 
     url: '/path/to/cancelOrder', 
     data: {'type': order_type, ... }, 
     }, 
}); 

// ... 

cancelOrder('Application', ...); 

所以,現在在你的後端的Django查看你必須使用你以前沒有一個字符串參數...

# views.py 
from django.db.models.loading import get_model 

def cancel_object(request): 
    model_type = request.POST['order_type'] # e.g. "Application" 
    id = request.POST['id'] 

    get_model('myApp', model_type).get(id=int(id)).cancel() 

    return HttpResponse(...) 
+0

我想你沒有得到我想說的。其實兩種訂單類型都是一樣的。兩者應該執行完全相同的功能。唯一的區別是它們必須分別生成不同的HttpResponse,因爲它們已從頁面的不同部分調用,因此需要Ajax-替換不同的div。 – Scrontch

相關問題