自定义绑定(knockout.js)根据其他</select>更新<select>

时间:2014-05-21 05:39:53

标签: javascript jquery ajax web-services knockout.js

到目前为止,我已经使用了淘汰赛几个月,但我已经成功了。

到现在为止,我遇到了问题(让我们这样称呼)我无法更新SELECT标记中的选项,因为从服务器检索de数据的ajax方法位于{{1所以基本上我的SELECT标签从第一个时刻起就充满了数据,但是如果想改变&#34;选项&#34;在第二个列表中根据我在第一个列表中选择的内容?

让我为你分解,所以你看看它是怎么回事......

- 我的观点概述[HTML5 + JQM] -

$(document).ready()

- 我的viewModel概述 -

<div data-role = "content>
  <label for = "liquorList"> Liquors Categories </label>
  <select data-bind= "options:liqList, 
                      optionsText: 'descitem', 
                      optionsValue: 'iditem', 
                      optionsCaption: 'Choose..', 
                      value: selectedCategory"  name="liquorList"></select>
  <label for = "productList"> Especific Products </label>
  <select data-bind= "options: productList, 
                      optionsText: 'descitem', 
                      optionsValue: 'iditem', 
                      optionsCaption: 'Choose..', 
                      value: selectedProduct"  name="productsList"></select>
</div> 

我已经在sessionStorage上设置了iditem的任何选项更改值($(document).ready(function(){ /* This is inside a function and retrieves the data to fill the liquorList */ $.ajax({ type : 'GET', url : url //some code to complete it }); /* Here lies my doubt */ /* Url is being built up based upon the selectedOption's iditem in the liquorList */ $.ajax({ type : 'GET', url : url + iditem, //some code to complete it }); )并且它有效。然后,我应该从sessionStorage获取此IDITEM以基于该值完成我的第二个URL。但我甚至不知道在哪个事件或哪里设置选项来检索它。

For Instance:

如果 - &gt;第一个清单内有&#34;朗姆酒,伏特加,葡萄酒&#34; 如果选择&#34; Rum&#34;从我使用的网络服务中获得的JSON应该只有与Rum相关的数据......&#34; Appleton,Bacardi,Malibu&#34; ,这意味着它会根据您首先选择的内容而改变。

有没有特别的活动呢? onblur,onchange所有这些东西都可以获得第一个列表的值,但第二个列表不会自动更改。我该怎么办 ?希望你能帮助同事。

/ ************* ************* / 编辑:07/06/2014

Sir @Kristof评论后,我的代码已经变成了这个...

onchange = "saveIdItem()"

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您应该能够订阅selectedCategory observable。
那样当它的值发生变化(也就是选择变化)时,你可以对json调用做出反应并更改你的productList observableArray。
您的代码可能如下所示:

myViewModel.selectedCategory.subscribe(function(newValue) {
    $.ajax({
        type : 'GET',
        url : url
        //some code to complete it
    });
});