【问题标题】:addFixedBar (vs. addChild) changes behavior of button in HeadingaddFixedBar (vs. addChild) 改变标题中按钮的行为
【发布时间】:2012-11-27 16:49:37
【问题描述】:

HTML

<div id="activities"></div>
<div id="activity-edit"></div>​

JavaScript

require([
    'dojo/ready', 'dojo/dom', 'dijit/registry', 'dojox/mobile/parser', 'dojox/mobile/deviceTheme', 'dojox/mobile/compat', 'dojox/mobile/Icon', 'dojox/mobile/ScrollableView', 'dojox/mobile/Heading', 'dojox/mobile/ToolBarButton', 'dojox/mobile'
],
function(ready, dom, registry, parser, deviceTheme, compat, Icon, ScrollableView, Heading, ToolBarButton, mobile) {
    ready(function() {
        var view_activities = new ScrollableView(null, 'activities');
        view_activities.selected = true;

        var heading = new Heading({
            label: 'Activities',
            fixed: 'top'
        });
        view_activities.addFixedBar(heading);

        var button = new ToolBarButton({
            icon: 'mblDomButtonWhitePlus',
            style: 'float:right;',
            moveTo: 'activity-edit',
            onClick: function(e) {
                click_activity_edit(e, 0);
            }
        });
        heading.addChild(button);

        var view_activity_edit = new ScrollableView(null, 'activity-edit');

        view_activities.startup();
    });

    this.click_activity_edit = function(e, activityid) {
        var view_activity_edit = registry.byId('activity-edit');
        view_activity_edit.destroyDescendants(false);

        heading = new Heading({
            id: 'heading-activity-edit',
            label: 'Activity',
            fixed: 'top'
        });
        view_activity_edit.addChild(heading);

        var button = new ToolBarButton({
            label: 'Cancel',
            moveTo: 'activities',
            transitionDir: -1,
            arrow: 'left'
        });
        heading.addChild(button);

        button = new ToolBarButton({
            label: 'Save',
            style: 'float:right;',
            moveTo: 'activities',
            transitionDir: -1,
            onClick: function(e) {
                click_activity_save(e, activityid, function() {
                    data.get_activities(request, handle_getActivities);
                });
            }
        });
        heading.addChild(button);

        view_activity_edit.startup();
    };

    parser.parse();
});​

重新创建行为的步骤:

单击“+”按钮,单击“取消”,再次单击“+”按钮,再次单击“取消”按钮不再起作用。

如果您将 addFixedBar 替换为 addChild,则该按钮每次都会按预期工作。我会这样做,但我需要修复 Heading,因为它位于 ScrollableView 上。

我知道 addFixedBar 将小部件添加到 domNode 而不是 containerNode,但我不明白为什么这会影响按钮的行为并且仅在第二遍时才会影响。我的猜测是它与使用 addFixedBar 时没有实际删除标题的 destroyDescendants 调用有关。我尝试在调用 destroyDescendants 后手动销毁标题,但这没有用。无论我是通过“dom”还是“registry”获取标题,第二遍标题都是未定义/空的。

感谢任何帮助或解释。

编辑

这里是 JSFiddle:http://jsfiddle.net/MPUvk/

【问题讨论】:

    标签: dojox.mobile


    【解决方案1】:

    关键是 startup() 调用。

    view_activity_edit.startup() 调用只会工作一次(startup() 设置一个内部 _started 标志,并且在它已经设置时什么也不做)。第二次创建视图时,startup() 什么都不做。

    addFixedBar 和 addChild 的不同行为是因为 addChild 在内部调用 startup(),而 addFixedBar 没有。

    所以要修复,只需在 addFixedBar 调用之后添加 heading.startup() 就可以了。 另一种可能性是在销毁视图时重置 view_activity_edit._started = false。

    【讨论】:

    • 非常感谢您对此进行调查。完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多