foreach循环内绑定不同的淘汰赛JS模板(bind different Knockout JS

2019-09-23 07:42发布

我想用KO模板来分析JSON文件( 见这里 )到一些漂漂亮亮网格布局..(觉得类似砖石/同位素布局)..每个模板部分将在它里面,但整体大小不同的长方形和正方形模板宽乘3盒符合的5盒的栅格高( 例如 )

鉴于这是我一直在努力做的是检测的模板,然后通过迭代每一个元素,如果其在迭代负荷一定的指数无论是单,双或三子模板..

我的问题是,我似乎无法得到它,以检查其在ViewTestProposal阵列IM目前的关键..

下面是我的WIP代码..

<div data-bind="template: {if: Template == 'basic2', visible: Template == 'basic2', foreach: ViewTestProposal}">
    <div data-bind="template: {if: ViewTestProposal[0], name: 'single'}"></div>
</div>
<script type="text/html" id="single">
    <div class="box single">
        <p data-bind="text: Artist, attr:{title: Artist}"></p>
    </div>
</script>

我试图改变的if: ViewTestProposal[0]部分,以with: ViewTestProposal[0] if: ViewTestProposal() === 0if: ViewTestProposal == 0无济于事。

预先感谢任何帮助,您可以提供

Answer 1:

模板名称参数可以是返回基于阵列中的当前项目名称的函数( 见注4 )。 有了这个,你可以对具有模板名称每个项目的访问属性:

<div data-bind="template: {
        foreach: ViewTestProposal, 
        name: function(item) {return item.boxsize;}
    }"></div>

如果您需要使用项目的索引数组中,这是开始可用淘汰赛2.1版通过$index 上下文属性 。 与2.2版开始(尚未发布[1月/ 10月/ 2012],但释放出可用的候选版本 ),名称功能还可以访问上下文对象。 然后,你可以这样做:

<div data-bind="template: {
        foreach: ViewTestProposal, 
        name: function(item, context) {
            switch(context.$index()) {
            case 0:
                return 'single';
            case 1:
                return 'double';
            // etc.
            }
        }
    }"></div>

显然,函数本身可以在您的视图模型来定义。



文章来源: bind different Knockout JS templates inside foreach loop