重新加载

时间:2015-08-04 07:36:46

标签: javascript jquery asp.net-mvc-4 knockout.js

我使用knockout的subscribe函数来获取第一个下拉列表的选定值以绑定第二个下拉列表中的值。我将所选的下拉值存储在会话中,并在刷新时更改下拉列表的值。这时订阅被调用两次,因此我在下拉列表中重复了每个值。

   self.getcountry = function () {         
        try {
     //code               
            $.ajax({
                //code
                statusCode: {
                    200: function (response) {                                   
                        $.each(response, function (index, data) {
                            self.country.push(data);
                        })
                        if(SESSIONVALUES!=null)
                        {
                             for (var i = 0; i < SESSIONVALUES.length; i++) {
                                var COUNTRYbind=SESSIONVALUES[i].vCOUNTRY;                           

                                $('#country option').filter(function () { return $.trim($(this).val()) == parseInt( COUNTRYbind); }).attr('selected', true);
                                $('#country ').change();                                 
                                self.selectedCountry(COUNTRYbind);// this is used to trigger the subscribe function       

                                                                }


                        }
                    }
                }
            });
        } catch (exception) { }
    };

这是订阅功能方法

  self.selectedCountry.subscribe(function (newValue) {
        //code
        try {

            $.ajax({
               //code
                statusCode: {
                    200: function (response) {                           
                        $.each(response, function (index, data) {
                            self.state.push(data);
                        })
                        if(SESSIONVALUES!=null)
                        {
                            for (var i = 0; i < SESSIONVALUES.length; i++) {                       
                                var statebind=SESSIONVALUES[i].vstate;
                                $('#states option').filter(function () { return $.trim($(this).val()) == parseInt(statebind); }).attr('selected', true);
                                $('#states').change();

                            }
                        }
                    }
                }

            });
        } catch (Exception) { }

    });

3 个答案:

答案 0 :(得分:3)

我一小时前遇到过这个问题!

试试这个:

MyHashMap p = new MyHashMap<>();
p.put(0, "Z");
p.put(1, "A");
p.put(17, "A");

然后您可以订阅,当它被触发时,您可以将oldValue与newValue进行比较。

e.g。在您的ViewModel中

Put: Table empty. Inflating table to threshold:16
Inflate: RoundUpPowerOf2 of size=16
Inflate: Setting Min of [capacity * loadFactor, MAXIMUM_CAPACITY + 1] as threshold
Inflate: Given values[capacity=16, loadfactor=0.75, MAXIMUM_CAPACITY=1073741824
Creating array of Entry[] with size:16
Put: Key not null:0
IndexFor: calculating index for [given hash=0, length=16]
Put: Obtained index:0
Put: Incrementing modCounter
Put: Adding a new Entry[hash=0, key=0, value=Z, i=0]
Put: Key not null:1
IndexFor: calculating index for [given hash=1, length=16]
Put: Obtained index:1
Put: Incrementing modCounter
Put: Adding a new Entry[hash=1, key=1, value=A, i=1]
Put: Key not null:16
IndexFor: calculating index for [given hash=16, length=16]
Put: Obtained index:0
Put: Iteraing over table[0] elements
Put: Incrementing modCounter
Put: Adding a new Entry[hash=16, key=17, value=A, i=0]

希望这有帮助。

答案 1 :(得分:0)

您使用的jQuery代码不属于那里。您的代码应该只是改变viewmodel元素,而Knockout将使DOM反映viewmodel。然后你就不必破解subscribable并将你的代码变成某种不受支持的混搭。使用淘汰赛。

This example可能会让您了解如何设置从属选择列表。

答案 2 :(得分:0)

只需添加“return false;”在功能结束时;