【问题标题】:GWT: SuggestionBox as a global variableGWT:建议框作为全局变量
【发布时间】:2013-03-29 14:56:59
【问题描述】:

我有一个包含 2 个视图和 2 个演示者的应用程序。我有一个使用 SuggestionBox 的带有搜索框的固定顶部菜单。我从数据库中获取建议列表,然后使用 addAll(..) 方法将其加载到 SuggestionBox 的 MultiWordSuggestOracle 中。

我正在使用 UiBinder,这是我的代码:

@UiField (provided=true) SuggestBox searchEntriesSuggestBox;
MultiWordSuggestOracle oracle; 

public MenuBar() {

  oracle = new MultiWordSuggestOracle();
  searchEntriesSuggestBox = new SuggestBox(oracle);
  initWidget(uiBinder.createAndBindUi(this));
}

public void loadUserEntries(Collection<String> entries){
  oracle.clear();
  oracle.addAll(entries);
}

第一次运行应用程序时,我使用 loadUserEntries() 加载建议。问题是当我更改视图(和演示者)时,因为 SuggestBox 加载了一个空的 MultiWordSuggestOracle,所以每次更改演示者时我都必须再次加载建议。

我想在应用程序的生命周期内将建议(MultiWordSuggestOracle)作为一个全局变量来维护,以避免使用 loadUserEntries 方法。

我尝试定义一个全局变量 MultiWordSuggestOracle,每次我必须加载 Presenter 时,使用我的全局 MultiWordSuggestOracle 创建一个新的 SuggestBox。但它没有用。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: java gwt suggestbox


    【解决方案1】:

    问题在于每个视图都使用自己的 MenuBar 实例,因为每个视图都创建自己的。

    有不同的方法可以解决您的问题,您可以使用多个 ActivityManagers,就像在这个 post 中解释的那样,或者您可以在您的 UI 中有一个固定部分,菜单栏不在您的 MVP 显示中,或者简单的解决方案是使用静态变量并将加载方法设为静态(仅调用此方法一次)。

     @UiField (provided=true) SuggestBox searchEntriesSuggestBox;
     static MultiWordSuggestOracle oracle = null; 
    
     public MenuBar() {
       if (oracle == null) {
         oracle = new MultiWordSuggestOracle();
       }
       searchEntriesSuggestBox = new SuggestBox(oracle);
       initWidget(uiBinder.createAndBindUi(this));
     }
    
     public static void loadUserEntries(Collection<String> entries){
       oracle.clear();
       oracle.addAll(entries);
     }
    

    【讨论】:

    • 谢谢。这对我帮助很大。我添加了一个全局变量来仅在第一次加载 SuggestBox。
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多