1

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に置き換えると、ボタンは毎回期待どおりに機能します。これを行いますが、ScrollableView上にあるため、見出しを修正する必要があります。

addFixedBarがウィジェットをcontainerNodeではなくdomNodeに追加することは理解していますが、それがボタンの動作に影響を与える理由がわかりません。2回目のパスでのみです。私の推測では、addFixedBarを使用しているときに、destroyDescendants呼び出しが実際に見出しを削除しないことと関係があると思います。destroyDescendantsを呼び出した後、手動で見出しを破棄しようとしましたが、機能しませんでした。「dom」または「registry」で見出しを取得するかどうかに関係なく、2番目のパスで見出しはundefined/nullです。

ヘルプや説明をいただければ幸いです。

編集

これがJSFiddleです:http://jsfiddle.net/MPUvk/

4

1 に答える 1

1

重要なのはstartup()呼び出しです。

view_activity_edit.startup()呼び出しは1回だけ機能します(startup()は内部_startedフラグを設定し、すでに設定されている場合は何もしません)。2回目にビューが作成されると、startup()は何もしません。

addFixedBarとaddChildの動作の違いは、addChildがstartup()を内部的に呼び出すのに対し、addFixedBarは呼び出さないためです。

したがって、修正するには、addFixedBar呼び出しの後にheading.startup()を追加するだけで、機能するはずです。別の可能性は、ビューを破棄するときにview_activity_edit._started=falseをリセットすることです。

于 2012-12-05T10:50:53.533 に答える