Javascript 绑定到jquery ready()内部但在敲除模型外部的数据范围

Javascript 绑定到jquery ready()内部但在敲除模型外部的数据范围,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我试图使用带有任意数据的数组绑定视图中的选择元素,这些数据在我的模型外部定义,但在jquery的ready()函数内部定义: <select data-bind='options: itemsList, value: selectedItem'> </select> $(document).ready(function($) { var item

我试图使用带有任意数据的数组绑定视图中的
选择
元素,这些数据在我的模型外部定义,但在jquery的
ready()
函数内部定义:

<select data-bind='options: itemsList,                                      
                   value: selectedItem'>
</select>


 $(document).ready(function($) {
    var itemsList = ["one", "two", "three"];

    function ViewModel() {
      var self = this;      
      self.selectedItem = ko.observable();   
    };
    ko.applyBindings(new ViewModel());
});
…这是可行的,但强制我覆盖每个实体的
toJSON()
,以抑制所有不属于所需json输出的可观察数组的序列化

另一个选项是将所有阵列添加到全局范围:

  <script>
     var itemsList = ["one", "two", "three"];
     var anotherList = ...
  </script>

var itemsList=[“一”、“二”、“三”];
var anotherList=。。。
…这很危险,坦率地说,它让我起麻疹;我不喜欢它;我想有更好的选择吗


我查看了knockout的绑定上下文,根据我的理解,
$root
$parent
都不能访问根模型之外的范围

将要序列化的所有内容放入子模型,并对其调用
toJSON()
,而不是根模型。然后您可以将
itemsList
放入根模型,并从绑定访问它。

我不知道ko,但我认为这应该可以:

<select data-bind='options: KoRepos.itemsList,                                      
                   value: selectedItem'>
</select>


 var KoRepos = {};  //Container for 'global' data repositories

 $(document).ready(function($) {
    KoRepos.itemsList = ["one", "two", "three"];

    function ViewModel() {
      var self = this;      
      self.selectedItem = ko.observable();   
    };
    ko.applyBindings(new ViewModel());
});

var KoRepos={}//“全局”数据存储库的容器
$(文档).ready(函数($){
KoRepos.itemsList=[“一”、“二”、“三”];
函数ViewModel(){
var self=这个;
self.selectedItem=ko.observable();
};
应用绑定(新的ViewModel());
});
这样就不会污染全局名称空间,只添加了一个新的变量(KoRepos)


我希望这会有所帮助

这不是一个坏主意;这只是一个要添加的字段,我可以在视图中的任何位置使用
$root.lists.listName
,刚刚确认,效果很好。是的,这与埃博尔曼的答案相同,使用容器方法,thx。
<select data-bind='options: KoRepos.itemsList,                                      
                   value: selectedItem'>
</select>


 var KoRepos = {};  //Container for 'global' data repositories

 $(document).ready(function($) {
    KoRepos.itemsList = ["one", "two", "three"];

    function ViewModel() {
      var self = this;      
      self.selectedItem = ko.observable();   
    };
    ko.applyBindings(new ViewModel());
});