2010-11-13 128 views
3


我在我的應用中使用jQuery模態對話框來處理正常的CRUD操作。在某些情況下,我甚至會打開兩個堆疊的模式對話框。jQuery通用代碼

然後我在外部JavaScript文件中創建了兩個通用函數來分別處理CRUD表單的顯示和提交。

要顯示模式對話框我調用下面的函數

此功能接收其他人之間,一個level參數指示功能如何堆疊對話框,並在那裏放置渲染的部分標記返回回從ajax調用。此功能正常工作。

內通過AJAX調用返回的局部視圖有輸入,並在年底將下面的代碼

<div style="text-align:right;"> 
    <input type="submit" id="btnSave" value="Salva" /> 
</div> 

,併爲jQuery的一部分,例如,

$("#contactForm").submit(function(event) { 
    _submitForm(1, event, "#contactForm", "post", "html", '<%= Url.Content("~/Contact/Save") %>'); 
}); 

,你可以看到提交功能有以下簽名

function _submitForm(level, event, formName, atype, adataType, aurl) { 
} 

它處理

  • 表單提交到正確的控制器動作
  • 用戶的反饋(例如「動作成功執行」)
  • 對話框關閉操作

解決所有的功能,包括關閉對話框,以使用正確的DIV面板所需要的電平的參數。

我希望能夠顯示相同的對話框有時作爲對話框,有時作爲子對話框。
爲了能夠做到這一點,我的意思是「從邏輯上說」因爲我不使用JavaScript和如此強大的jQuery,我需要以下變化:

  • 修改_loadDialog函數保存對話框內level參數標記本身
  • 修改_submitForm函數,並使用之前從_loadDialog函數保存的正確level參數進行修改。

我該如何做到這一點?

+0

這兩個函數之間的當前關係是什麼?從傳入'_loadDialog'的'onCloseHandler'調用'_submitForm'? – VoteyDisciple 2010-11-13 12:38:13

+0

@VoteyDisciple:編號'_submitForm'由 – Lorenzo 2010-11-13 12:40:38

回答

1

我對什麼地方和什麼時候有點困惑,但似乎你想要將一些信息與特定元素聯繫起來。

要做到這一點,你可以使用jQuery的.data()方法。它會將您想要的任何數據與特定元素相關聯。

不知道究竟應該在你的情況下使用,但這裏有一個普通的例子:

$('#someSelector').data('level', 3); 

現在用ID someSelector的元素將有數量3映射到其'level'屬性,其相關的數據。

所以要找回它,你可以這樣做:

$('#someSelector').data('level'); // returns 3 

當毀損已與它相關聯的數據(這是這樣的數據只是一個例子)的元素,你應該確保使用.remove().empty()或者自動或手動刪除數據的其他方法之一。

+0

好的。基本上,我試圖從我的視圖和從任意級別的堆疊對話框的部分中始終使用相同的函數'loadDialog'和'submitForm'。所以我需要確保從partial或view調用'submitForm'時它會關閉正確的對話框。 – Lorenzo 2010-11-13 17:24:06

1

聽起來你所需要的只是在調用level參數時已將其傳遞給_submitForm函數。

function _loadDialog(level, action, id, title, onCloseHandler) { 
    var form = $('<form ...></form>'); 
    // ... Generates the form markup 

    form.submit(function() { 
     _submitForm(level, ...); 
    }); 
} 

雖然我已經很明顯跳過了所有我不知道你的實現細節,關鍵是根本,無論level被傳遞到_loadDialog稍後會獲得通過到_submitForm當它被調用。

在JavaScript中,_submitForm在調用_loadDialog的同時不會被調用。通過所謂的「閉包」(JavaScript程序員喜歡談論的東西),level變量會安全地保存在您的匿名回調函數form.submit()中,並且在最終調用該函數時仍然可以使用相同的值。

+0

表單內的提交按鈕的點擊事件調用。我真的可以理解你的建議,而且看起來很容易實現。無論如何,我不確定這會在我的實現中起作用,因爲它不像你使用的表單變量那麼簡單。我將編輯我的問題,在兩個函數中添加更多詳細信息,讓您更好地瞭解細節。如果你能看一看就太好了。謝謝! – Lorenzo 2010-11-13 13:28:12

+0

如果在創建對話框的過程中,我可以在對話框標記中添加一個不可見部分,以使部分內部的代碼可以查詢。在這部分裏面,我可以放置等級值 – Lorenzo 2010-11-13 13:38:59