2

検索したデータでデータバインド Ul-Li リストの内容を更新したいと考えています。次のViewModelを使用しています

function PatientsModel(data)
{
    var self = this;

    self.Patients = ko.observableArray([]);

    self.Patients(data.Patients);

    self.addPatient = function (model, event)
    {
        alert("Patients to Add: " + model.LastName + ',' + model.FirstName);
        //Replace with AJAX Calls : self.people.push({ name: "New at " + new Date() });
    };

    self.removePatient = function (model, event)
    {
        alert("Patients to Delete:" + model.LastName + ',' + model.FirstName);
        //Replace with AJAX calls : self.people.remove(this);
    }

    self.RefreshData = function (data)
    {
        self.Patients = ko.observableArray([]);
        self.Patients(data.Patients);
    }
}

私が作成したコンテンツを更新するには、RefreshData、データバインド された患者を更新するメソッド「foreach:患者」をUlで更新します

私は次のバインドを行っています:

AllPatientList.PatientsModel = null;
                            AllPatientList.PatientsModel = new PatientsModel(data);
                            ko.applyBindings(AllPatientList.PatientsModel, $('#AllPatientDiv>div>ul')[0]);

View Model のコンテンツを更新するには、次のようにします。

if (AllPatientList.PatientsModel != null && AllPatientList.PatientsModel != undefined)
                            {
                                AllPatientList.PatientsModel.RefreshData(data);
                            }
                            else
                            {
                                AllPatientList.PatientsModel = new PatientsModel(data);
                                ko.applyBindings(AllPatientList.PatientsModel, $('#AllPatientDiv>div>ul')[0]);
                        }

しかし、それは機能せず、UL の内容は変更されていません。

さらに私は次のことを試みました:

ko.cleanNode($('#AllPatientDiv>div>ul')[0]);
AllPatientList.PatientsModel = new PatientsModel(data);
                                ko.applyBindings(AllPatientList.PatientsModel, $('#AllPatientDiv>div>ul')[0]);

Repeated/Duplicate dataEntries を使用してリストを作成しています。3 つではなく 9 つのリスト項目が表示されています (それぞれが 3 回繰り返されます)。

ここで何が間違っているのかわかりません。ko.cleanNode() もリストからコンテンツを削除していません。更新された内容で UL - LI リストを再バインドする方法を教えてください。

4

1 に答える 1

2

RefreshData 関数がバインディングを壊しているため、変更されていません。applyBindings()最初にサブスクリプションを呼び出すと、Patients配列が作成されます。呼び出すRefreshDataと、配列が新しい配列で上書きされます。この新しい配列には、バインディング サブスクリプションはありません。

古い配列をクリアしたい場合はremoveAll、新しいデータを追加する前に使用してください。これにより、バインディング サブスクリプションがそのまま維持されます。

編集:

これは、これを示す非常に単純なフィドルです

于 2012-10-30T19:06:13.847 に答える