0

我有一個關於使用引導組合框插件與knockout(和mvc)結合使用的問題。基因敲除js bootstrap組合框自定義綁定

我有一種情況,我在我的模板中使用了像Dropdownlisfor,textboxfor等out of box MVC html助手。我正在使用Knockout將一組數據綁定到模板。 mvc html助手爲DropDownlist幫助器創建一個'select'控件。在我想在控件上調用我的引導程序插件之前,我需要渲染它,以便設置所有必需的驗證屬性等。我最初使用afterrender後,在該方法中,我找到了'select'控件並在其上調用插件。

我們的問題是,我們不想每次我們在其他地方以類似的方式使用引導組合框控件時都要這樣做。所以,我一直在研究關於自定義綁定(我首先應該已經完成​​),並且對我如何在自己的模型中使用自定義綁定有疑問。

我發現這篇文章,他爲自舉typehead控件創建了一個自定義綁定。我可以對組合框進行類似的操作。但是我只能在控件渲染後調用它。那麼,有沒有辦法讓我們指定KO只執行自定義綁定「afterrender」而不是馬上。這樣,呈現選擇控件,然後我可以通過選擇控件在自定義綁定中調用插件。

這是一些更多信息。

我有一個使用模板

<table> 
     <tbody data-bind='template: {name: "editorRowTemplate", foreach: rules, afterRender: function(data) {{$root.view.templateRendered(data) } }'> </tbody> 
</table> 

表我有一個與此類似

<script id="editorRowTemplate" type="text/html"> 

    <tr class="dataRow" data-bind="attr: { id: 'EditorRow' + $index() }"> 
     <td> 
      <div class="editor-field"> 
       @Html.KnockOutDropDownListFor(rule => ruleTemplate.ReserveWordId, new List<SelectListItem>(), null, 
                new { @class = "combobox", data_bind = "options: $root.ReserveWords, optionsText:'Name', optionsValue:'ReserveWordId', attr : {id: $index(), name: $index()}" }, ((int)this.Model.Prefix).ToString()) 

       @Html.KnockOutValidationMessageFor(rule => ruleTemplate.ReserveWordId, "*", new { data_bind = "attr : { 'data-valmsg-for': $index()}" }, ((int)this.Model.Prefix).ToString()) 
      </div> 
     </td> 
    </tr> 
</script> 

我有我自己的HTML傭工(KnockoutDropDownListFor等),其產生選擇模板使用指定的KO綁定進行控制。

請建議什麼是一個好辦法。 讓我知道你是否需要更多信息。

回答

0

我不確定我完全理解這個問題。但是,您不需要擔心等待MVC幫助程序進行渲染,因爲這會發生在服務器端,並且淘汰賽會發生在客戶端。你也可以使用$(document).ready(function(){...});你也可以使用$(document).ready(function(){...});如果你想在做任何事之前確定DOM已經加載。

+0

我實際上想要使用自定義綁定來控制自包含,以便在其他屏幕中使用它的人不必擔心檢查DOM準備好等等。我希望將自定義綁定直接添加到HtmlHelper並調用它像KnockoutBootstrapComboboxFor,它最終會給我一個引導組合框,包含所有必需的MVC特定屬性,如驗證,名稱,ID等。 –

+0

據我所知,您要使用它的每個視圖都必須準備一個文檔和一個ko.apply綁定,所以我不認爲你將能夠完全自我包含這一點。你可以看看做些什麼佈局來使這個頁面之間可以重複使用... 看看[自定義綁定]的挖空文檔(http://knockoutjs.com/documentation/custom-bindings.html)因爲它可能會清除一些關於如何使用它們的東西 –

+0

如果我們對沒有模板的表使用foreach循環,那麼您是否發生了oo知道如何在呈現該行之後如何設置自定義綁定到列(不是在所有行被渲染之後)。例如讓我說我有一個3列(TD)的表,我有自定義綁定在第一列。我想要這個自定義綁定在它在dom中呈現後纔會觸發。 –