【问题标题】:knockout multiple with bindings带绑定的淘汰赛
【发布时间】:2013-12-07 09:19:54
【问题描述】:

我有一个包含多个视图模型的页面,我需要基于其中的 2 个动态构建一个复选框网格。

此代码基于 1 个视图模型填充网格:

<div id="fundingDetailLevels" class="scroll-adjust" data-bind="with: modelOne">
        <table class="table table-hover">
            <thead>
                <tr data-bind="foreach: modelOneArray">
                    <!-- ko if: $index() == 0 -->
                        <th></th>
                    <!--  /ko -->
                    <th data-bind="text: name" ></th>
                </tr>
            </thead>
            <tbody data-bind="foreach: modelOneArray2">
                <tr data-bind="foreach: $parent.modelOneArray" >
                    <!-- ko if: $index() == 0 -->
                        <td data-bind="text: $parent.name"></td>
                    <!--  /ko -->
                    <td><input type="checkbox"></input></td>
                </tr>
            </tbody>    
        </table>
    </div>

这给了我一个网格:

     header1  header2
row1 checkbox checkbox
row2 checkbox checkbox

但我需要的是更接近这个的东西:

<div id="fundingDetailLevels" class="scroll-adjust" data-bind="with: modelOne, modelTwo">
        <table class="table table-hover">
            <thead>
                <tr data-bind="foreach: modelOneArray">
                    <!-- ko if: $index() == 0 -->
                        <th></th>
                    <!--  /ko -->
                    <th data-bind="text: name" ></th>
                </tr>
            </thead>
            <tbody data-bind="foreach: modelTwoArray">
                <tr data-bind="foreach: $parent.modelOneArray" >
                    <!-- ko if: $index() == 0 -->
                        <td data-bind="text: $parent.name"></td>
                    <!--  /ko -->
                    <td><input type="checkbox"></input></td>
                </tr>
            </tbody>    
        </table>
    </div>

但是找不到modelTwo

【问题讨论】:

    标签: html knockout.js


    【解决方案1】:

    如果您只制作一个视图模型,那么您可以实现您所追求的。试试这个:

            var baseModel = function () {
                var self = this;
    
                self.modelOneArray = ko.observableArray([{ "name": "Jack" }, { "name": "Jimmy" }]);
                self.modelTwoArray = ko.observableArray([{ "name": "Jack2" }, { "name": "Jimmy2" }]);
            };
    
            var myModel = myModel || {};
    
            myModel = new baseModel();
            ko.applyBindings(myModel);
    

    和html:

    <div id="fundingDetailLevels" class="scroll-adjust">
        <table class="table table-hover">
            <thead>
                <tr data-bind="foreach: modelOneArray">
                    <!-- ko if: $index()==0 -->
                    <th></th>
                    <!-- /ko -->
                    <th data-bind="text: name"></th>
                </tr>
            </thead>
            <tbody data-bind="foreach: modelTwoArray">
                <tr data-bind="foreach: myModel.modelOneArray">
                    <!-- ko if: $index()==0 -->
                    <td data-bind="text: myModel.modelOneArray().name"></td>
                    <!-- /ko -->
                    <td>
                        <input type="checkbox"></input>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
    

    【讨论】:

    • 这是我列出的第一个解决方案,也是我最终要做的。谢谢。
    猜你喜欢
    • 2013-02-04
    • 2013-10-31
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多