2012-08-07 36 views
0

首先出现的是这个已经是一个提问/回答: Constrain position of 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(); 
     }); 

但是,我可以移动窗格的地方我想,连外被设置的框。请有任何想法吗?

回答

1

您需要覆盖postCreate方法,而不是dojox/layout/FloatingPane类中的contructor

原因是原始类将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... 
    ); 
    } 
    }); 
}); 
+0

谢谢,这是非常合情合理的,它的工作现在:)。 – L4zl0w 2012-08-10 08:41:18