Knockout.js 如何在淘汰视图中引用此项
大家好,今天我有一个非常简单的问题要问你们 我有以下标记(视图): 更新2 实际上,如果我调整我的函数,将Knockout.js 如何在淘汰视图中引用此项,knockout.js,reference,Knockout.js,Reference,大家好,今天我有一个非常简单的问题要问你们 我有以下标记(视图): 更新2 实际上,如果我调整我的函数,将id作为参考,可能会有所帮助,因为当if调用firstMatch()时,我应该能够使用this.property访问当前上下文中的成员 //identify the first matching item by id self.firstMatch = ko.computed(function (id) { var search = false;
id
作为参考,可能会有所帮助,因为当if
调用firstMatch()
时,我应该能够使用this.property
访问当前上下文中的成员
//identify the first matching item by id
self.firstMatch = ko.computed(function (id) {
var search = false;
ko.utils.arrayForEach(self.members, function (member) {
if (member.id == id) {
search = true;
}
});
return search;
});
这似乎解决了我的问题。我只是像往常一样把事情复杂化了
更新的视图():
现在我只需要弄清楚为什么我没有进入ko.utils.arrayForEach(self.members(),function(member){…})代码>我应该是金色的
更新1
正如@Haridarshan建议检查self.members()
是否为空,这就是我得到的结果:
self.members() == "" => true
self.members() == null => false
self.members() === "" => false
self.members() === null => false
果然self.members().length
返回一个0
人力资源管理
更新2
看看以下两者之间的区别:
self.members = ko.observableArray();
及
如果有的话
更新3
为什么它没有早点击中我。self.members
数组显示0且未进入循环的原因是,获取单个成员的调用是异步完成的。这意味着ajax完成了它的工作,其余的代码也顺利运行。但是,这带来了一个问题,即在检查时数组中没有成员
现在,由于每个人的输入,这个问题得以解决。检查self.members()是否有值。如果为空,它将不会进入循环您可以尝试$data
吗?Instead一直在尝试从淘汰文档到其他所有内容,但运气不太好。但我确信我正在接近。我有self.members=ko.observable([])代码>初始化为空数组(就在从数据库初始化成员之前),这意味着它可以为空(如果在某个点上未添加成员),但不能为null。因此,如果数组是空的,它应该跳过foreach,但如果不是空的,它应该允许我访问单个对象,这样我就可以执行交叉引用检查。如果self.members()将有值,那么它肯定会进入循环,但如果它是空的或null,它将跳过。提供JSFIDLE将对解决您的问题有很大帮助。ko.observearray()是一个可观察的数组,其中as ko.observeable([])是一个正常的可观察的数组,您在其中通过了该数组。在ko.observearray()中,可以像在数组中一样直接推送项,例如self.members.push(value);但是在ko.observable([])中,您推送存储在observable中的数组中的值,例如self.members().push(值);谢谢你的解释@Haridarshan。对我来说,这无疑是一个正确的观点。
<div class="cards" data-bind="sortable: { data: cards, afterMove: cardMoved }">
<div class="card">
<div><span data-bind="text: title"></span></div>
<div class="dnnRight" data-bind="if: firstMatch(id)">
<a href="#" class="dnnSecondaryAction" data-bind="click: $root.openCard"><%= LocalizeString("EditBtn") %></a>
<a href="#" class="dnnSecondaryAction" data-bind="click: $parent.removeCard"><%= LocalizeString("DeleteBtn") %></a>
</div>
</div>
</div>
//identify the first matching item by id
self.firstMatch = function (id) {
console.log('firstmatch()');
var search = false;
console.log('search: ', search);
ko.utils.arrayForEach(self.members(), function (member) {
console.log('member.id', member.id);
if (member.id == id) {
search = true;
}
});
console.log('search: ', search);
return search;
};
self.members() == "" => true
self.members() == null => false
self.members() === "" => false
self.members() === null => false
self.members = ko.observableArray();
self.members = ko.observable([]);