2014-10-09 53 views
0

我正在从服务器获取选择列表并填充observableArray。然后我想将选定的项目设置为预定义的值。我有一个非常简单的jsFiddle,它可以模拟通过单击按钮从服务器拉取数据。Knockout预定义的默认选项绑定到可观察数组

http://jsfiddle.net/JonathanN/hev1rqeu/

这里的Java脚本的基本尝试:

(function() { 
    var vm = (function() { 
     var self = this;   
     self.array = ko.observableArray([]);   
     self.selectedValue = ko.observable(); 
     self.useSetTimeout = ko.observable(false);   
     self.array.subscribe(function(newValue) { 
      self.selectedValue('b'); 
     });  
     self.populate = function() { 
      self.array(['a','b','c']); 
     };  
    }()); 
    ko.applyBindings(vm); 
}()); 

这是我的解决办法,它取代 “self.selectedValue( 'B');”:

var waitForSelectToPopulate = function() { 
    self.selectedValue('b'); 
    if(self.selectedValue() != 'b') { 
     setTimeout(waitForSelectToPopulate, 10); 
    } 
}; 
waitForSelectToPopulate();    

作为解决方法,我不太喜欢这个。似乎应该有一个合理的方法来处理这个问题,但只是设置订阅触发器的值似乎不起作用。

回答

1

一旦填入事件已经去了,并得到了JSON,并将其放入你的数组中,WH你不只是刚刚设置的价值?只要您在self.array中设置数据,它就会更新。

(function() { 
    var vm = (function() { 
     var self = this; 

     self.array = ko.observableArray([]); 
     self.selectedValue = ko.observable(); 

     self.populate = function() { 
      // magical assmagic goes and get's json, and converts it to ['a','b','c'] 
      self.array(['a','b','c']); // dropdown is now populated 
      self.selectedValue('c'); // therefore we can set it to a valid value 
     }; 

    }()); 
    ko.applyBindings(vm); 
}()); 

看到以下内容: http://jsfiddle.net/hev1rqeu/5/

相关问题