1

extjsでカスケードコンボボックスをやりたいです。コンボボックスを作成する必要があります

コースコンボボックス

{ 
    xtype : 'combobox',  
    emptyText : 'Course',  
    id:'combo-course',  
    displayField : 'name',  
    valueField : 'id',  
    store:coursestore,  
    forceSelection: true,  
    triggerAction:'all',  
    queryMode: 'remote',  
    listeners: {  
        'select': {  
            fn:function(combo, value) {  
                var comboModule = Ext.getCmp('combo-module');  
                comboModule .setDisabled(true);
        comboModule .clearValue('');
        comboModule .getStore().removeAll();
        comboModule .getStore().load({
        params: {courseId: combo.getValue()}
         });
                comboModule .setDisabled(false);  
            }  
        }  
    }  
}

コースモジュール:

{
    xtype : 'combobox',  
    emptyText : 'Module',  
    id:'combo-module',  
    displayField : 'name',  
    valueField : 'id',  
    disabled:true,  
    remoteFilter:true,  
    store:coursemodulestore,  
    forceSelection: true,  
    queryMode: 'remote',  
    triggerAction:'all'
}

レストサービス

    @Path("/coursemodule/{courseId}")
    public List<CourseModule> getAllCourseModules(@PathParam("courseId")String courseId ) {
        try {           
            return courseObj.getModulesForCourse(courseId);
                } catch (HibernateException e) {
            logger.debug(e.getMessage());
        }
        return null;
    }

アプリケーションを実行して最初のコンボボックスを選択すると、2 番目のコンボボックスに正しい値が最初にのみ表示されます。
しかし、コンボボックスを2回目に選択すると、2番目のコンボボックスに値が表示されません。

4

3 に答える 3

1

すでに適用したフィルターをクリアしたいようです。適用されたフィルターを削除するには、ストアで clearFilter() メソッドを使用できます。これを次のようなコードに混在させることができます。

comboModule.clearValue();  
// new line to clear any filter applied to the store
comboModule.getStore().clearFilter(true);  
comboModule.getStore().filter('courseId',combo.getValue());  
于 2012-11-03T03:18:33.933 に答える
0

おそらくあなたの問題はstore.load()が非同期であるということです。ロードのコールバックで残りのロジック(フィルタリングなど)を渡してみてください。

于 2012-11-02T17:34:53.433 に答える
0

2 回目にロードしたときに LoadMask が表示されますか?

これを使用して、その動作をオーバーライドします。

Ext.override(Ext.LoadMask, {
    onHide: function() {
    this.callParent();
  }
});
于 2012-11-11T14:59:31.880 に答える