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();
});
重新创建行为的步骤:
点击“+”按钮,点击“取消”,再次点击“+”按钮,再次点击“取消”,按钮不再有效。
如果用addChild替换addFixedBar,则按钮每次都按预期工作。我会这样做,但我需要修复标题,因为它在ScrollableView上。
我知道addFixedBar将小部件添加到domNode而不是containerNode,但我不明白为什么这会影响按钮的行为,只会影响第二次传递。我的猜测是它与destroyDescendants调用有关,实际上在使用addFixedBar时没有删除标题。我在调用destroyDescendants之后尝试手动销毁标题,但这不起作用。无论我是通过“dom”还是“注册表”获得标题,标题在第二次传递时都是未定义/ null。
感谢任何帮助或解释。
修改
这是JSFiddle:http://jsfiddle.net/MPUvk/
答案 0 :(得分:1)
关键是startup()调用。
view_activity_edit.startup()调用只能工作一次(startup()设置一个内部_started标志,并且在已设置时不执行任何操作)。第二次创建视图时,startup()不执行任何操作。
addFixedBar和addChild之间的不同行为是因为addChild在内部调用startup(),而addFixedBar则没有。
所以要修复,只需在addFixedBar调用之后添加heading.startup()即可。 另一种可能性是在销毁视图时重置view_activity_edit._started = false。