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;
    };

该问题体现在以下代码中。前几次迭代似乎很好,但之后“未定义”作为“课程”参数传递

   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 回答