knockout.js 为什么在敲除视图模型中重新排序项目时,此单选按钮会变为“关闭”?

brgchamk  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

我有一个简单的组件,允许输入一个问题和多个答案。答案可以通过点击向上/向下按钮重新排序。我注意到,当答案被重新排序时,正确/不正确的选择值变成了,我不太明白为什么。
以下是我的move up/down方法:

self.moveUp = answer => {
        var i = question.answers.indexOf(answer);
        if (i >= 1) {
            var array = question.answers();
            question.answers.splice(i-1, 2, array[i], array[i-1]);
        }
    }

    self.moveDown = answer => {
        var i = question.answers.indexOf(answer);
        if (i < question.answers().length) {
            var array = question.answers();
            question.answers.splice(i, 2, array[i+1], array[i]);
        }
    }

这里有一个小提琴展示了这个问题的实际情况:https://jsfiddle.net/gurubob/k8s3dyvc/4/
我很确定这个问题是由单选按钮本身和绑定引起的,因为如果我把它改为使用文本输入,这样我就可以看到值,那么它就可以正常工作了。你可能也注意到了“0”和“1”对于正确值的尴尬用法(而不是更明显的true/false)-我现在不想解决这个问题,但是如果它造成了足够的痛苦,并且没有好的解决方法,那么我会解决的。
思想欢迎。
鲍勃

5tmbdcev

5tmbdcev1#

在向上移动和向下移动两种方法中,我都更新了数组操作逻辑,以正确地更新数组。除了使用splic,我还使用了rеmovе和splic,以Knockout.Js可以跟踪的方式修改了数组。以下是更新后的功能:

self.moveUp = answer => {
     var i = question.answers.indexOf(answer);
     if (i >= 1) {
         question.answers.remove(answer);
         question.answers.splice(i-1, 0, answer);
     }
 }

 self.moveDown = answer => {
     var i = question.answers.indexOf(answer);
     if (i < question.answers().length - 1) {
         question.answers.remove(answer);
         question.answers.splice(i+1, 0, answer);
     }
 }

相关问题