knockout js bootstrap combobox自定义绑定

时间:2012-11-28 19:51:39

标签: asp.net-mvc twitter-bootstrap knockout.js custom-binding

我有一个关于将bootstrap combobox插件与knockout(和mvc)结合使用的问题。

我有一种情况,我在我的模板中使用Dropdownlisfor,textboxfor等盒装MVC html助手。我正在使用Knockout将数据集合绑定到模板。 mvc html帮助程序为DropDownlistfor帮助程序创建一个“选择”控件。在我想在控件上调用我的bootstrap插件之前,我需要先渲染它,以便设置所有必要的验证属性等。我最初使用了afterrender,在那个方法中,我找到了'select'控件并在其上调用了插件。

我们的问题是,每当我们必须以类似的方式在其他地方使用bootstrap组合框控件时,我们不想这样做。所以,我一直在研究自定义绑定(我本来应该已经做过),并且有一个关于如何在我的stuation中使用自定义绑定的问题。

我发现这篇文章他为bootstrap typeahead控件创建了一个自定义绑定。我可以为组合框做一个类似的。但我只能在渲染控件后调用它。那么,有没有办法让我们指定KO只执行自定义绑定“afterrender”而不是立即执行。这样,渲染了选择控件,然后我可以通过select控件调用自定义绑定中的插件。

以下是更多信息。

我有一张使用模板的表

<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绑定的选择控件。

请建议一下这是一个好方法。 如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

我不确定我完全理解这个问题。但是你不必担心等待MVC帮助器渲染,因为这将发生在服务器端,淘汰的东西将发生在客户端。

你也可以使用$(document).ready(function(){...});如果你想在做任何事之前确保DOM已加载。