1

私の目標は、KendoUIWeb-Multiselect からの複数選択リストにユーザー選択を保存することです。リストへの変更を追跡する最も簡単な方法は、多対多の関係からすべてを削除し、新しく選択した項目を追加することだと思いました. 多対多の関係を反復し、各エンティティのアスペクトを「setDeleted」に設定すると、反復によって「未定義」オブジェクトがループを通過し始めます。表面的には、結合オブジェクトを削除するように設定すると、Breeze 内のリスト内の他のオブジェクトに影響を与えているように見えます。すべての結合オブジェクトを繰り返し削除する別の方法はありますか?

注: このメソッドを呼び出さなくても、結合モデルを問題なく反復処理できます。

public class Course
{
    public int Id { get;set; }
    public string Name { get;set; }
}
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class StudentCourse
{
    public int StudentId { get;set; }
    public virtual Student Student { get;set; }
    public int CourseId { get;set; }
    public virtual Course Course { get;set; }
}

次のコードは完全に機能します (KendoUI の複数選択の複数選択ドロップダウンを設定します):

    var getSelectedCourses = function () {
        var selected = [];
        ko.utils.arrayForEach(student().studentCourses(), function(course) {
            var courseId = parseInt(course.courseId());
            selected.push(courseId);
        });
        return selected;
    };

この問題は、次のコードで明らかになります。最初の数回の反復は問題なく実行されているようですが、その後は「undefined」が「 course 」パラメーターとして渡されます

   var removeListItems = function () {
        if (courseHasChanges()) {
            //Remove all list items
            ko.utils.arrayForEach(student().studentCourses(), function(studentCourse) {
                if (studentCourse) { //passing undefined after 2nd or 3rd iteration
                    studentCourse.entityAspect.setDeleted();
                }
            });
        }
    };
4

1 に答える 1

1

Breeze は、studentCourses()を呼び出して繰り返し処理しているため、配列からコースを削除すると思いますsetDeleted()

おそらくslice(0)、元の配列のクローンを作成するために使用するとうまくいくstudentCourses()かもしれません: (未テスト)

var removeListItems = function () {
    if (courseHasChanges()) {
        //Remove all list items
        ko.utils.arrayForEach(student().studentCourses().slice(0), function(course) {
            if (course) { //passing undefined after 2nd or 3rd iteration
                course.entityAspect.setDeleted();
            }
        });
    }
};
于 2013-04-19T04:23:01.360 に答える