javascript - 删除后 knockout View 不会从 View 中删除项目

标签 javascript knockout.js asp.net-mvc-5 typescript

我有这段代码,可以成功从页面上显示的考试列表中删除考试,但页面仍然显示已删除的考试。您必须手动刷新页面才能更新 View 。我们在其他页面上使用了类似的模式,并且它工作正常。我不明白为什么它在此页面上不起作用。

 // Used to handle the click event for Delete
    remove = (exam: Models.Exam) => {
        $("#loadingScreen").css("display", "block");
        var examService = new Services.ExamService();

        examService.remove(exam.examId()).then(() => {
            examService.getByFid().then((examinations: Array<Models.Exam>) => {


                this.exams(examinations);

                this.template("mainTemplate");
            });
        }).fail((error: any) => {
                // Add this error to errors
                this.errors([error]);
                window.scrollTo(0, 0);
            }).fin(() => {
                $("#loadingScreen").css("display", "none");
            });
    }

这是显示考试列表的 UI 代码

    <div class="section module">
        <!-- ko if: exams().length > 0 -->
        <!-- ko foreach: exams.sort(function(a,b){return a.mostRecentDateTaken() > b.mostRecentDateTaken() ? 1:-1}) -->
        <div class="addremove_section bubbled">
            <a class="button open_review" data-bind="click: $root.edit">Edit</a>
            <a class="button open_review" data-bind="click: $root.remove">Delete</a>
            <div class="titleblock">
                <h4 data-bind="text: 'Exam Name: ' + examTypeLookup().examTypeName()"></h4>
                <div data-bind="if:examEntityLookup()!=null">
                    <div data-bind=" text: 'Reporting Entity: ' + examEntityLookup().description()"></div>
                </div>
                <div data-bind="text: 'Most recent date taken: ' +  $root.formatDate(mostRecentDateTaken())"></div>
                <div data-bind="text: 'Number of attempts: ' + numberOfAttempts()"></div>
                <div data-bind="text: 'Pass/Fail Status: ' + $root.PassFailEnum(passFailId())"></div>
            </div>
            <div class="clearfix"></div>
        </div>
        <!-- /ko -->
        <!-- /ko -->
        <!-- ko if: exams().length == 0 -->
        <div class="addremove_section bubbled">
            <div class="titleblock">
                <div>No Exams Have Been Entered.</div>
            </div>
        </div>
        <!-- /ko -->
    </div>

编辑:我发现如果我从 View 中的这一行删除排序

<!-- ko foreach: exams.sort(function(a,b){return a.mostRecentDateTaken() > b.mostRecentDateTaken() ? 1:-1}) -->

<!-- ko foreach: exams -->

它有效!唯一的问题是我需要对数据进行排序。

最佳答案

我从 View 中删除了排序,并在服务中进行了排序。不太确定为什么我无法在 View 中排序。我认为这是一个 knockout.js 错误。

<!-- ko foreach: exams -->


        [HttpGet]
        [Route("api/exam")]
        public IEnumerable<TDto> GetApplicantExams()
        {

                var dtos = GetCollection(() => _examService.GetApplicantExams(UserContext.Fid).OrderBy(e => e.DateTaken));
                return dtos.ForEach(t => AddItems(t));

        }

关于javascript - 删除后 knockout View 不会从 View 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808860/

相关文章:

javascript - knockout JS : Image loading

javascript - 表数据不使用 ko.js mvc 显示为 html

javascript - 隐藏 'Clear' 按钮,直到单击 'Apply' 按钮

javascript - Angular ,在 html 中找不到元素

javascript - 当您不知道 ID 时启用顺序选择菜单

javascript - 将 HTML 响应转换为数组或 NodeJS 中的对象

knockout.js - 在这种情况下,Knockoutjs 不会更新 UI

javascript - 在格式化数字输入时验证数字输入

c# - 附件不发送 ASP.NET MVC

c# - asp.net:如何将两个模型组合在一起才能创建父实体及其所有子实体?