首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Aviarc中快速更新数据集列

如何在Aviarc中快速更新数据集列
EN

Stack Overflow用户
提问于 2012-10-26 10:25:31
回答 1查看 55关注 0票数 1

例如,我有一个按钮,它迭代数据集并将一个字段设置为一个值。

代码语言:javascript
复制
<button left="10" width="100" bottom="12" height="32" label="Select All" enabled-if-dataset="data">
    <when event="onClick" xmlns="urn:aviarc:widget:com.aviarc.toronto.widget.core.action:1">
        <dataset:dataset-iterator dataset="data">
            <set-field field="data.selected" value="y"/>
        </dataset:dataset-iterator>
    </when>
</button>

这在较小的数据集上工作得很好,但是现在我得到了一个包含400行的数据集,并且在运行时有一个明显的延迟。

有没有其他方法可以做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-26 10:59:48

我推荐的方法是使用以下算法:

  • 禁用绑定到记录表的数据集上的相关事件使用字段进行迭代update
  • re-enable

dataset events

  • 触发将刷新记录表

的事件

我会将更新封装到Javascript操作小部件中。下面的摘录来自Aviarc3.6,我在那里做了类似的事情(从run方法),但你应该能够根据你的需要调整它:

代码语言:javascript
复制
/* disable all events on the target dataset which would most likely trigger some widget behaviours */
var dsEvents = [
    "ONDATASETCHANGED"
    ,"ONDATACHANGED"
    ,"ONLOCALDATACHANGED"
    ,"ONCONTENTSREPLACED"
    ,"ONCURRENTROWCHANGED"
    ,"ONROWCREATED"
    ,"ONROWDELETED"
    ,"ONROWADDED"
    ,"ONCURRENTROWDELETED"
    ,"ONROWCOMMITACTIONCHANGED"
    ,"ONCURRENTROWCOMMITACTIONCHANGED"
    ,"ONROWFIELDCHANGED"
    ,"ONCURRENTROWFIELDCHANGED"
];
var events = toDS.getEvents();
for (var i = 0, count = dsEvents.length; i < count; i++) { 
    events.getEventByName(dsEvents[i]).disable(); 
}
toDS.deleteAllRows();
fromDS.getAllRows().doLoop(function(fromDSRow) {
    if (doFiltering) {
        if (fromDSRow.getField(userIDField) == userID) {
            this._copyRow(fromDSRow, toDS.createRow());
        }
    } else {
        this._copyRow(fromDSRow, toDS.createRow());
    }
}, this);
toDS.reset();
/* enable all events back */
for (var i = 0, count = dsEvents.length; i < count; i++) { 
    events.getEventByName(dsEvents[i]).enable(); 
}
/* trigger refresh on the widgets as if we just updated ds via ajax */
toDS.onContentsReplaced.fireEvent();
toDS.onDataChanged.fireEvent();
toDS.onDatasetChanged.fireEvent();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13079954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档