我有这个淘汰赛Map我的数组检索从 AJAX 调用下面。
function InvoiceViewModel(data) {
var self = this;
self.survey = data;
}
AJAX 调用
$.ajax({
url: 'http://localhost:43043/api/damage',
type: 'GET',
headers: { 'Accept': 'application/json' },
data: {
orderNumber: num,
category: cat
},
success:
function (data) {
var usingRoutData = document.URL;
ko.applyBindings(new InvoiceViewModel(data));
},
error: function () {
alert('failure');
}
});
我的数组
var test = {
Name: Blah,
Attributes: [
{Name: Test, Type: Photo, Year:1988},
{Name: Test, Type: Photo, Year:1988},
{Name: Test, Type: Photo, Year:1988}
]
};
如何绑定数据
<div id="invoiceBodyWrapper">
<div data-bind="template: { name: 'invoice-template', foreach: surveys }">
</div>
<div class="invoiceWrapper">
</div>
<div id="completePictureWrapper" data-bind="template: { name: 'photo-template', foreach: new Array(Attributes) }"></div>
</div>
</script>
<script type="text/html" id="photo-template">
<!-- ko if: classification === 'photo' -->
<div id="pictureWrappers">
<img class="img" data-bind="attr: { src: 'http://myimagepath/download/full/' + $index()+1 }" />
</div>
<!-- /ko -->
</script>
<script src="~/Scripts/DamageInvoiceCreation.js"></script>
我需要一种方法来限制我的属性foreach循环只显示3个属性中的2个。我只找到了一些关于如何做到这一点的东西,它们似乎过于复杂。我无法想象在淘汰赛中没有一个简单的方法来做到这一点。
8条答案
按热度按时间laik7k3q1#
如果你总是有3个属性,而你总是只想显示其中的2个,那么你就不需要精确地显示它们。
然而,有一个特殊的绑定上下文变量
$index()
,它可以让你做一些基本的隐藏,尽管它不会阻止呈现。因为$index是从0开始的,条件是$index() < 2
。正如Andrey在注解中指出的,$index
is an observable,所以你必须用括号作为方法调用它。或者比较不会按照您的预期进行(您将比较int和函数)。如果你想在foreach循环上使用一个通用的限制器,你是对的,这并不简单,你必须创建一个custom binding。
另一种可以考虑的方法是在视图模型中预处理数据,当设置
this.survey = data;
时,可以删除任何不想在此时显示的属性。编辑:我从你的编辑中看到你知道
ko: if
psuedo-element。我完全忘记了这些,但是你可以很容易地使用一个psuedo-element来防止呈现超过某个索引的模板项。foreach
仍然会评估可观察的,这本身不应该有任何巨大的开销。h5qlskok2#
JavaScript数组包含了优秀的
slice
方法,可以很好地满足您的需求:但正如@Patrick-M提到的,您不需要循环:
我的Repeat绑定包含一个限制重复次数的选项:
vtwuwzda3#
您可以创建具有有限数组限制的计算:
然后,你所要做的就是foreach limited。你甚至可以添加某种“more”元素:
我希望它能对后代有所帮助;)
q43xntqr4#
放置.slice(0,1)以从FOREACH数据绑定数组(模型)中获取前2项。
像这样的东西
或者如果你愿意
关于切片()https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice
vzgqcmou5#
您可以通过以下方式限制循环:
uurity8g6#
我解决了一个类似的问题,方法是将原始数组项的子集推送到视图模型中的另一个数组,然后绑定到子集数组。
oxf4rvwz7#
在foreach中最简单的方法是使用$index
vcudknz38#
可试作如下:
示例: