1

前のコンボ (richselect コントロール) で選択した値 (またはグループ ID) に応じて、2 番目のコンボのオプションを設定したい:

rows:[
    { 
      view:"richselect", label:"Country",             
      id:'rich_1', value:1,
      options:countries, 
      on:{onChange:function(newv){
        $$("combo_1").getList().filter( function(obj){                  
          if (obj.country == newv) console.log(obj.value);
          return obj.country == newv;
        });
      }}
    },
    { 
      view:"combo", id:"combo_1", label:"Name",   
      options:cities              
    }
]

スニペット

フィルタリング機能は機能しますが、表示時にオプションが更新されていることがわかりました。コンボのようなイベントが見つからなかったonBeforeShowので、質問 - これらのオプションをフィルタリングする方法はありますか?

4

1 に答える 1

2

Combo は結果を調整するためにフィルタリング自体を使用します。これにより、カスタム フィルタリング ロジックの結果が無効になります。

次のスニペットを確認してくださいhttp://webix.com/snippet/da3923b5
もう少し複雑なロジックを使用しており、ここに中間データ コレクションがあります。

var cDC = new webix.DataCollection({ データ: 都市 });

これで、最初のコンボがコレクションをフィルタリングし、コレクションが変更されるたびに、2 番目のコンボがコレクションからデータをリロードします。

webix.ui({
  rows:[
    { 
      view:"richselect", label:"Country",             
      id:'rich_1', value:0,
      options:countries, 
      on:{
        onChange:function(newv){
          cDC.filter( function(obj){                  
            if (obj.country == newv) console.log(obj.value);
            return obj.country == newv;
          });
        }
      }
    },
    { 
      view:"combo", id:"combo_1", label:"City",   
      options:{ data: cDC }
    }
  ]
});

興味がある場合は、コンボには onBeforeShow イベント ハンドラーもあります。

{ 
  view:"combo", id:"combo_1", label:"City",   
  options:{ 
    data: cDC, 
    on:{ onBeforeShow:function(){ webix.message("show"); }}
   }
}
于 2016-03-31T16:01:22.417 に答える