2013-11-27 33 views
1

我正在使用Kendo UI 2013.Q2。Kendo UI - MVC - 使用自定義jQuery選擇器進行初始化

我有一個場景,我的網頁正在加載多個模式彈出窗口(頁內div元素)。內容使用ajax請求從部分視圖加載。因此,如果我的部分視圖內容包含kendo組件,則第二個彈出窗口無法初始化kendo元素,因爲它們與之前的模式彈出窗口中的元素具有相同的ID。

有沒有什麼辦法可以修改kendo初始化的jQuery選擇器,這樣我就可以在選擇器中指定父窗口元素。

MVC代碼:

@(Html.Kendo().NumericTextBoxFor(m => m.DemirbasInfo.SicilSiraNo) 
      .Decimals(0).Format("{0:#}") 
      .Min(0).Max(int.MaxValue) 
      .Spinners(false)) 

呈現爲:

jQuery(function(){jQuery("#DemirbasInfo_SicilSiraNo").kendoNumericTextBox({"format":"{0:#}","spinners":false,"decimals":0});}); 

我想修改,以使其爲:

jQuery(function(){jQuery("#ModalWin_2 #DemirbasInfo_SicilSiraNo").kendoNumericTextBox({"format":"{0:#}","spinners":false,"decimals":0});}); 
+0

他們能不能給予唯一的ID的?我們使用網格和signalR有類似的問題。在創建具有相同ID的元素時,它們不會初始化。所以,我們給每個元素一個唯一的id基於一些模型或其他條件。 –

+0

@NicklasWinger我考慮過這個。我們主要通過選擇器在後期(選擇元素,禁用,啓用,編輯,保存等等)製作大量的javascript和jquery編碼。根據模型數據賦予唯一的元素id會使實現這些操作變得如此複雜。 – Noldor

回答

1

這不支持開箱即用。你有兩個選擇:

  1. 使用的NumericTextBox
  2. JavaScript版本修改包裝的源代碼。您需要編輯WidgetBase.cs並更改Selector屬性的實現。例如,您可以創建一個setter它

    private string _selector; 
    
    public string Selector 
    { 
        get 
        { 
         return _selector ?? (IsInClientTemplate ? "\\#" : "#") + Id; 
        } 
        set 
        { 
         _selector = value; 
        } 
    } 
    

然後使用它是這樣的:

@{ 

// initialize the NumericTextBox 
var numeric = Html.Kendo().NumericTextBoxFor(m => m.DemirbasInfo.SicilSiraNo) 
      .Decimals(0).Format("{0:#}") 
      .Min(0).Max(int.MaxValue) 
      .Spinners(false)); 

// Set the Selector 
numeric.ToComponent().Selector = "#ModalWin_2 #DemirbasInfo_SicilSiraNo"; 
}; 

@* render it *@ 
@numeric 
+0

感謝您的回答。 但編輯源代碼不是一個選項。我們決定在項目開始時只使用MVC包裝。現在使用MVC包裝器也是項目中的編碼標準。我無法使用JavaScript版本。 我在模態窗口中使用「iframe」元素提出瞭解決方案。所以iframe的內容不會受到來自父窗口的元素的影響。 – Noldor