0

まず第一に、すでにこれに対する質問/回答があります: Dojo FloatingPane の位置を制約する http://jsfiddle.net/phusick/3vTXW/

上記を使用して可動ペインを作成しましたが、最初は機能していました。次に、オブジェクトを使用してモジュールを作成しましたが、制約が機能しなくなりました。オブジェクトをウィンドウの外に移動できます。

次のコードを別のモジュールに配置しました。

define(["dojo/_base/declare", "dojo/dnd/move", "dojox/layout/FloatingPane"],     function(declare, move, FloatingPane){
return declare("dashboardFloatingPane", FloatingPane, {

constructor: function() {
        this.inherited(arguments);
        this.moveable = new dojo.dnd.move.boxConstrainedMoveable(
            this.domNode, {
                handle: this.focusNode,
                constraints: {
                        l: 0,
                        t: 20,
                        w: 500,
                        h: 500                            
                    },
                within: true
            }
        );                            
    } 
});
});

次に、ここにオブジェクトを作成します。

        require(["dojo/dnd/move", "dojox/layout/FloatingPane", "dashboardFloatingPane", "dojo/domReady!"],
        function(move, FloatingPane, dashboardFloatingPane) {

            var widgetNode1 = dojo.byId("widget1");

            var floatingPane = new dashboardFloatingPane({
                title: "A floating pane",
                resizable: true,
                dockable: false,
                style: "position:absolute;top:40px;left:40px;width:160px;height:100px;"       
                }, widgetNode1);

            floatingPane.startup();
        });

しかし、ここでも、設定されたボックスの外であっても、ペインを好きな場所に移動できます。アイデアはありますか?

4

1 に答える 1

1

クラスではpostCreateなく、メソッドをオーバーライドする必要があります。contructordojox/layout/FloatingPane

その理由は、元のクラスがthis.moveable独自の可動タイプに設定されているため、それをオーバーライドするには、後で制約付きの可動タイプに再割り当てする必要があるためです。

これを試して:

define(["dojo/_base/declare", "dojo/dnd/move", "dojox/layout/FloatingPane"], function(declare, move, FloatingPane){
  return declare("dashboardFloatingPane", FloatingPane, {

    postCreate: function() {
      this.inherited(arguments);
      this.moveable = new dojo.dnd.move.boxConstrainedMoveable(
        // snip...
      );
    } 
  });
});
于 2012-08-10T03:39:29.577 に答える