13

所以我一直在绞尽脑汁想办法解决这个问题。我有一个 foreach,吐出模板,我希望第一个元素具有特殊属性。到目前为止,我发现没有奏效的解决方案。

这是foreach:

<h3 class="question">Geografi</h3>   
        <p class="answer" data-bind="template: { name: 'geographyTmpl', foreach: geographyList,  templateOptions: { selections: selectedGeographies } }"></p>

这是模板:

<script id="geographyTmpl" type="text/html">
<input class="geoCheckList" validate="required:true, minlength:2" name="geoCheckList[]" type="checkbox" data-bind='value: $data, attr: { id: "Geo"+$index()},checked: $root.selectedGeographies' />
<label data-bind="text: $data, attr: { 'for': 'Geo'+$index()}"></label>

我想在第一个元素中添加:“validate="required:true, minlength:2"。

我需要做什么?

如果它有帮助,它用于 jQuery 验证。

4

4 回答 4

33

检查我的答案以获取有关 KnockoutJS 中第一个元素的另一个问题foreach

跳过 foreach 淘汰赛 js 数组中的项目?

<div data-bind="text: ItemsArray[0].someProperty"></div>
<div data-bind="foreach: ItemsArray">
<!-- ko if: $index() == 0 -->
     <div data-bind="text: someProperty"></div>
 <!-- /ko -->
<!-- ko if: $index() != 0 -->
    <div data-bind="text: anotherDifferentProperty"></div>    
 <!-- /ko -->
</div>
于 2013-03-11T13:48:59.870 回答
0

您应该能够使用计算出的 observable 来返回布尔值,如果布尔值为真,则显示属性(标准淘汰赛)?

像这样的东西

this.IsFirst = ko.computed(function() {
    return this == Array[0];
}, this);

看起来很老套,但应该可以

或使用

   {{if $item.first === $data}}
于 2013-03-11T13:48:42.763 回答
0

我很想使用自定义绑定而不是模板,然后从 bindingContext 中获取 $index,并仅在 $index 为 0 时添加 validate 属性。

ko.bindingHandlers.yourBindingName = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // Create your input and label elements here then
        $(element).append(// add your new elements in here);
    }
};
于 2013-03-11T13:48:53.083 回答
0

只要您从索引中删除括号,早期的帖子就可以使用。

像下面这样

<div data-bind="foreach: ItemsArray">
<!-- ko if: $index == 0 -->
     <div data-bind="text: someProperty"></div>
 <!-- /ko -->
<!-- ko if: $index != 0 -->
    <div data-bind="text: anotherDifferentProperty"></div>    
 <!-- /ko -->
</div>

于 2019-12-04T20:44:23.607 回答