【问题标题】:Breeze Many to Many relationship and setting Aspect to 'setDeleted' on iteration issue在迭代问题上微风多对多关系并将 Aspect 设置为“setDeleted”
【发布时间】:2013-04-12 02:06:29
【问题描述】:

我的目标是将用户选择保存在来自 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();
                }
            });
        }
    };

【问题讨论】:

    标签: javascript knockout.js kendo-ui breeze


    【解决方案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();
                }
            });
        }
    };
    

    【讨论】:

    • 没错,布伦丹。另一方面,我最初对删除函数的参数名称course 感到困惑。该函数实际上是删除StudentCourses
    • 对此很抱歉...但是,我的目标是删除所有 StudentCourse 关系...
    • @David - 将slice(0) 添加到arrayForEach 参数有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2021-09-14
    • 2015-07-09
    • 2014-11-11
    相关资源
    最近更新 更多