Как мне остановить dijit.layout.TabContainer от переключения вкладок, основываясь на состоянии данных на вкладке? - PullRequest
2 голосов
/ 21 сентября 2010

Я знаю, как отключить вкладки и т. Д.

Это касается предотвращения переключения события onclick на активную вкладку, если пользователь не выполнил условие.

Есть лифункция, к которой я могу подключиться, передаст мне событие, на котором я могу использовать dojo.stopEvent ()?

Ответы [ 2 ]

3 голосов
/ 14 декабря 2013

Вы также можете сделать это с аспектом.

aspect.around(tabContainer, "selectChild", function(selectChild) {
        return function(page) {
            if(confirm("Do you want to change tab?"))
                selectChild.apply(this, arguments);
        }
});

Скрипка: http://jsfiddle.net/vmsuu/4/

Кредит Фредде: http://dojo -toolkit.33424.n3.nabble.com / dijit-layout-TabContainer-Confirm-message-on-switch-tabs-td3990778.html

2 голосов
/ 18 ноября 2010

У меня та же проблема, прямого способа сделать это нет, но вы можете расширить свой виджет:


dojo.extend(dijit.layout.TabController, {
    onButtonClick: function(/*dijit._Widget*/ page,evt) {
        // summary:
        //      Called whenever one of my child buttons is pressed in an attempt to select a page
        // tags:
        //      private
        this.beforeButtonClick(page,evt);
        this._onButtonClick(page,evt);

    },
    beforeButtonClick:function(page,evt){

    },
    _onButtonClick:function(page,evt){
        console.log(evt.cancelBubble);
        if(evt.cancelBubble){
            return;
        }
        var container = dijit.byId(this.containerId);
        container.selectChild(page);
    }
});

использование:


var widget = dijit.byId('your_tabContainer');
dojo.connect(widget.tablist,"beforeButtonClick",function(page,evt){
//do the detection, if it meet the condition, ignore it,
//if not, stop the event
   if(page.id !== "tab1"){
      dojo.stopEvent(evt)
   }
});
...