如何在添加前检查重复签名。在下面的场景中,如果找不到签名,我想添加签名。
var Signature = function (name, interestDeclared) {
this.Name = ko.observable(name);
this.RelevantInterest = ko.observable(interestDeclared);
}
viewModel = {
signatures: ko.observableArray([]),
addSignature: function () {
var name = $('#signatureName').val();
var intd = $('#interest').is(':checked');
this.signatures.push(new Signature(name, intd));
},
deleteSignature: function (signature) {
this.signatures.remove(signature);
},
insertWitness: function (signature, position) {
this.signatures.splice(position, 0, signature);
}
};
ko.applyBindings(viewModel, document.getElementById("signatories"));谢谢,-Naren
发布于 2012-03-28 00:46:58
使用jQuery的grep函数:
addSignature: function () {
var name = $('#signatureName').val();
var intd = $('#interest').is(':checked');
if($.grep(this.signatures(), function(el){return el.Name() === name;}).length === 0){
this.signatures.push(new Signature(name, intd));
}
}发布于 2012-03-28 01:21:54
您还可以使用KO框架中的一些内置实用程序函数。我以前已经用这个技术解决了这个问题:
var name = $('#signatureName').val(),
intd = $('#interest').is(':checked'),
match = ko.utils.arrayFirst(this.signatures(), function (item) {
if (item.Name() === name) {
return selectedCounsel;
}
});
if (!match) {
// This means it wasn't already in our array, so we'll add it.
this.signatures.push(new Signature(name, intd));
}我也同意@madcapnmckay,不要使用jQuery从输入中找到值,更新您的模型,以便signatureName和interest绑定到您的模型并使用这些值。
发布于 2012-03-28 00:39:37
您可以像这样使用数组实用程序函数。
if (!Array.prototype.findIndexOf) {
Array.prototype.findIndexOf = function (search) {
var len = this.length, i, item;
if (typeof search != "function") {
throw new TypeError();
}
for (i = 0; i < len; i += 1) {
item = this[i];
if (search.apply(this, [item])) {
return i;
}
}
return -1;
};
}然后像这样更新你的addSignature方法。
addSignature: function () {
var name = $('#signatureName').val();
var intd = $('#interest').is(':checked');
var found = this.signatures().findIndexOf(function(s) { return s.Name() === name; });
if (found == -1) {
this.signatures.push(new Signature(name, intd));
}
}所有与js数组相关的东西的Here's a great resource。
仅供参考。您不应该通过jquery选择器获取name/interest值。相反,分别使用KO的值/检查绑定将值绑定到viewModel。这样,您的addSignature方法就可以与标记完全解耦。
希望这能有所帮助。
https://stackoverflow.com/questions/9893435
复制相似问题