【问题标题】:Dojo - How to refresh combobox with updated ItemFileReadStore dataDojo - 如何使用更新的 ItemFileReadStore 数据刷新组合框
【发布时间】:2011-06-05 16:41:21
【问题描述】:

我为 Dojo 中的组合框更改了 ItemFileReadStore。 我的代码看起来像

    <span dojoType="dojo.data.ItemFileReadStore"
                jsId="comboStore"
                data="transformData">
            <select dojoType="mywidget.DropDown" id="transformCombo" value="" store="comboStore" searchAttr="name" name="state" maxHeight="100"/>

我的小部件类似于 dojo 组合框小部件。我更改了 transformData 但组合框不会更新,直到页面完全重新加载。有什么想法吗?

【问题讨论】:

    标签: javascript html ajax dojo


    【解决方案1】:

    如果内容在服务器端发生变化,而您只想在不重新加载页面的情况下刷新本地副本,您可以在商店中调用 fetch 并在收到新数据时更新您的组件。

    这是我在服务器端内容更新时用来刷新 dojox.grid.DataGrid 的代码:

    // initialise store and link to DataGrid
    var store = new dojo.data.ItemFileReadStore({
        url: "items.json",
        clearOnClose: true,
        urlPreventCache: true
    });
    var grid = dijit.byId("grid")
    grid.setStore(store);
    
    // code to update local copy
    store.close();
    store.fetch({
        onComplete: function(items, request) {
            grid._refresh();
        }
    });
    

    如果您正在修改数据客户端,您可能应该按照 Andrei 的建议使用 ItemFileWriteStore。

    编辑: grid.sort() 可用于刷新 DataGrid 以替代 grid._refresh()(其行为可能会随着时间而改变)

    【讨论】:

    • 请注意,如果附加了 dndManager,关闭存储不会冒泡到 dnd。我们需要在“刷新”后拆除 dnd 并重建
    【解决方案2】:

    如何刷新 ItemFileReadStore? ItemFileReadStore - 它是只读数据存储。在您的情况下,您应该使用 ItemFileWriteStore。看这个问题“dijit.form.filteringselect dynamically change options”。我想这就是你要找的。​​p>

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      相关资源
      最近更新 更多