【问题标题】:knockout js bootstrap combobox custom binding淘汰js引导组合框自定义绑定
【发布时间】:2012-11-16 18:55:36
【问题描述】:

我有一个关于将引导组合框插件与敲除(和 mvc)结合使用的问题。

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

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

我找到了这篇文章,他在其中为引导预输入控件创建了一个自定义绑定。我可以为组合框制作一个类似的。但我只能在控件呈现后调用它。那么,有没有办法让我们指定 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 绑定的选择控件。

请提出一个好的解决方法。 如果您需要更多信息,请告诉我。

【问题讨论】:

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


    【解决方案1】:

    我不确定我是否完全理解这个问题。但是,您不必担心等待 MVC 助手渲染,因为这将发生在服务器端,而淘汰赛将发生在客户端。

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

    【讨论】:

    • 我实际上想使用自定义绑定使控件自包含,以便在其他屏幕中使用它的人不必担心检查 DOM 是否准备就绪等。我有点想直接添加自定义绑定到一个 HtmlHelper 并将其命名为 KnockoutBootstrapComboboxFor 之类的东西,这最终会给我一个引导组合框,其中包含所有必要的 MVC 特定属性,如验证、名称、id 等
    • 据我所知,你想在其中使用它的每个视图都必须准备好一个文档和一个 ko.apply 绑定,所以我认为你不能完全自我包含它.您也许可以考虑对布局做一些事情,以使其在页面之间可重用......也请查看custom bindings 的淘汰文档,因为它可能会清除一些关于如何使用它们的内容
    • 你知道吗,如果我们对没有模板的表使用 foreach 循环,我们如何在行呈现后设置自定义绑定到列(而不是在呈现所有行之后) .例如,假设我有一个包含 3 列 (td) 的表,并且我在第一列上有自定义绑定。我希望该自定义绑定仅在其在 dom 中呈现后触发。
    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多