3

ViewModel があり、そのプロパティの 1 つが observableArray (レシーバー) です。新しいレコードを追加する前に、メール アドレスがコレクションに既に存在するかどうかを確認して、エントリが重複しないようにしたいと考えています。助けてください。ここからアプローチを試しました 観察可能な配列に条件付きで項目をプッシュする方法は? しかし、それは機能していません。メールに追加する項目が既にリストにあるかどうかを検出できません。AddReceiver 関数が呼び出された場合に、newReceiverData メール アドレスを検証する必要があります。これが私のコードです。

ビューモデル

var ReceiversViewModel = function () {
    var self = this;
    var errorModal = {};

    self.firstname = ko.observable();
    self.lastname = ko.observable();
    self.receivers = ko.observableArray();
    self.newReceiver = {
        receiverfirstname: ko.observable(''),
        receiverlastname: ko.observable(''),
        receiveremailaddress: ko.observable('')
    };
       self.AddReceiver = function () {
        var newReceiverData = ko.toJS(self.newReceiver);
        if (ReceiverValidate() == true) {
        //check if newReceiverData.receiveremailaddress value already exist
            self.receivers.push({
                EmailAddress: newReceiverData.receiveremailaddress,
                FirstName: newReceiverData.receiverfirstname,
                LastName: newReceiverData.receiverlastname
            });
        }
    }; 
};
4

2 に答える 2

3

私は通常、ノックアウトを使用するときに、軽量のunderscore.jsライブラリーの「any」関数をこの種の目的で使用します。

if (!_.any(self.receivers(), function(receiver) { return receiver.receiveremailaddress() == newReceiver.receiveremailaddress(); })) {
            // push new receiever 
        }

比較関数は、必要に応じて単純にすることも複雑にすることもできます。

于 2013-05-29T09:59:07.687 に答える