Mvvm 更改dropdownlist源将丢失选定值

Mvvm 更改dropdownlist源将丢失选定值,mvvm,drop-down-menu,kendo-ui,Mvvm,Drop Down Menu,Kendo Ui,我尝试使用剑道mvvm解决以下问题: 我有3个下拉列表,我需要在一个下拉列表中选择的选项不会出现在其他两个下拉列表中。这适用于所有3个下拉列表。 我做了以下工作: var viewModel = kendo.observable({ fruits: [ {Text:'apple', Value:1}, {Text:'orange', Value:2},

我尝试使用剑道mvvm解决以下问题: 我有3个下拉列表,我需要在一个下拉列表中选择的选项不会出现在其他两个下拉列表中。这适用于所有3个下拉列表。 我做了以下工作:

            var viewModel = kendo.observable({
            fruits: [
                {Text:'apple', Value:1},
                {Text:'orange', Value:2},
                {Text:'grapes', Value:3},
                {Text:'banana', Value:4},
                {Text:'mango', Value:5},
                {Text:'kiwi', Value:6}
            ],

            fruits1: function(){
                var self = this;
                var sf2 = self.get('selectedFruit2').Value;
                var sf3 = self.get('selectedFruit3').Value;

                var fruits = _.filter(self.fruits, function(e){
                    return e.Value !== sf2 && e.Value !== sf3;
                });

                return fruits;
            },
            selectedFruit1 : null,

            fruits2: function(){ 
                var self = this;
                var sf1 = self.get('selectedFruit1').Value;
                var sf3 = self.get('selectedFruit3').Value;

                var fruits = _.filter(self.fruits, function(e){
                    return e.Value !== sf1 && e.Value !== sf3;
                });

                return fruits;
            },
            selectedFruit2 : null,

            fruits3: function(){  
                var self = this;
                var sf1 = self.get('selectedFruit1').Value;
                var sf2 = self.get('selectedFruit2').Value;

                var fruits = _.filter(self.fruits, function(e){
                    return e.Value !== sf1 && e.Value !== sf2;
                });

                return fruits;                    
            },
            selectedFruit3 : null
        });

        viewModel.selectedFruit1 = viewModel.fruits[0];
        viewModel.selectedFruit2 = viewModel.fruits[1];
        viewModel.selectedFruit3 = viewModel.fruits[2];

        kendo.bind($("form"), viewModel);
其中下拉列表1使用水果1作为源,下拉列表2使用水果2,下拉列表3使用水果3

这是可行的,但如果您开始更改下拉列表中的选项,其中一个下拉列表中显示的值会毫无原因地更改。 例如,如果我在第一个下拉列表中选择“grapes”,然后开始使用下拉列表2(将其更改为mango、apple、mango等),则下拉列表1显示的内容将从“grapes”更改为其他内容(即使视图模型“selectedFruit1”中的值仍然是“grapes”)

我设置了这个jsbin,您可以在其中看到HTML

所以我的问题是:为什么会发生这种情况?这是剑道mvvm中的一个bug吗?还是我遗漏了什么?

我认为下拉列表正在维护其选定的索引。因此,当第一次填充下拉列表时,框3被设置为grapes,即其水果列表中的索引0。当下拉列表2更改时,橙色现在成为下拉列表3列表中的索引0。换句话说,我认为它总是通过selctedIndex值来更新自己,而不是实际选定的对象

不过这只是我的猜测,我还没有查看源代码以确定这是否正确。

我认为下拉列表正在维护其选定的索引。因此,当第一次填充下拉列表时,框3被设置为grapes,即其水果列表中的索引0。当下拉列表2更改时,橙色现在成为下拉列表3列表中的索引0。换句话说,我认为它总是通过selctedIndex值来更新自己,而不是实际选定的对象


不过这只是我的猜测,我还没有查看源代码以确定这是否正确。

这似乎是剑道中的某种缺陷。在他们的新版本(v2012.3.1315版)中,我的代码按预期工作。
(我使用的是以前的版本:2012.3.1114)

这似乎是剑道中的某种缺陷。在他们的新版本(v2012.3.1315版)中,我的代码按预期工作。
(我使用的是以前的版本:2012.3.1114)

是的,这似乎是错误,但我不知道如何修复它。据推测,下拉列表应该与与值关联的viewmodel属性同步是的,这似乎是错误,但我不知道如何修复它。据推测,下拉列表应该与与该值关联的viewmodel属性同步