Package twisted :: Package web :: Package woven :: Module widgets :: Class Widget

[show private | hide private]
[frames | no frames]

## Class Widget

    View --+
           |
          Widget

Known Subclasses:
  `FormFillerWidget`, `Input`, `Table`, `List`, `Text`, `DefaultWidget`, `Row`, `Anchor`, `Div`, `Error`, `Br`, `Bold`, `Link`, `Cell`, `Span`, `RawText`

A Widget wraps an object, its model, for display. The model can be a simple Python object (string, list, etc.) or it can be an instance of `model.Model`. (The former case is for interface purposes, so that the rest of the code does not have to treat simple objects differently from Model instances.)

If the model is-a Model, there are two possibilities:

- we are being called to enable an operation on the model
- we are really being called to enable an operation on an attribute of the model, which we will call the submodel

Method Summary
| ``__init__`(self, model, submodel, setup, controller, viewStack, *args, **kwargs)`
| ``__getitem__`(self, item)` Convenience syntax for getting an attribute from the resultant DOM Node of this widget.
| ``__setitem__`(self, item, value)` Convenience syntax for adding attributes to the resultant DOM Node of this widget.
| ``add`(self, item)` Add `item' to the children of the resultant DOM Node of this widget.
| ``addEventHandler`(self, eventName, handler, *args)` Add an event handler to this widget.
| ``addUpdateMethod`(self, updateMethod)` Add a method to this widget that will be called when the widget is being rendered.
| ``cleanNode`(self, node)` Do your part, prevent infinite recursion!
| ``dispatchResult`(self, request, node, result)` Check a given result from handling a node and look up a NodeMutator adapter which will convert the result into a node and insert it into the DOM tree. (inherited from `View`)
| ``dispatchResultCallback`(self, result, request, node)` Deal with a callback from a deferred, dispatching the result and recursing children. (inherited from `View`)
| ``generate`(self, request, node)` Allow a view to be used like a widget.
| ``generateDOM`(self, request, node)` Return a DOM Node to replace the Node in the template that this Widget handles.
| `getChild(self, path, request)` (inherited from `View`)
| `getChildWithDefault(self, path, request)` (inherited from `View`)
| ``getData`(self)` I have a model; however since I am a widget I am only responsible for a portion of that model.
| ``getNodeController`(self, request, node, submodel, model)` Get a controller object to handle this node. (inherited from `View`)
| ``getNodeModel`(self, request, node, submodel)` Get the model object associated with this node. (inherited from `View`)
| `getNodeView(self, request, node, submodel, model)` (inherited from `View`)
| ``getPattern`(self, name, default, clone)` Get a named slot from the incoming template node.
| ``getSubview`(self, request, node, model, viewName)` Get a sub-view from me. (inherited from `View`)
| ``getTemplate`(self, request)` Override this if you want to have your subclass look up its template using a different method. (inherited from `View`)
| `handleControllerResults(self, controllerResult, request, node, controller, view, success)` (inherited from `View`)
| ``handleDocument`(self, request, document)` Handle the root node, and send the page if there are no outstanding callbacks when it returns. (inherited from `View`)
| `handleNewNode(self, request, returnNode)` (inherited from `View`)
| `handleNode(self, request, node)` (inherited from `View`)
| `handleOutstanding(self, request)` (inherited from `View`)
| `importViewLibrary(self, namespace)` (inherited from `View`)
| ``initialize`(self, *args, **kwargs)` Use this method instead of __init__ to initialize your Widget, so you don't have to deal with calling the __init__ of the superclass.
| ``insert`(self, index, item)` Insert `item' at `index' in the children list of the resultant DOM Node of this widget.
| ``lookupTemplate`(self, request)` Use acquisition to look up the template named by self.templateFile, located anywhere above this object in the heirarchy, and use it as the template. (inherited from `View`)
| `modelChanged(self, payload)`
| ``onEvent`(self, request, eventName, *args)` Dispatch a client-side event to an event handler that was registered using addEventHandler.
| ``recurseChildren`(self, request, node)` If this node has children, handle them. (inherited from `View`)
| `render(self, request, doneCallback)` (inherited from `View`)
| `renderFailure(self, failure, request)` (inherited from `View`)
| ``sendPage`(self, request)` Check to see if handlers recorded any errors before sending the page (inherited from `View`)
| `setController(self, controller)` (inherited from `View`)
| ``setData`(self, data)` If the return value of `getData`is a Deferred, I am called when the result of the Deferred is available.
| `setDataCallback(self, result, request, node)`
| ``setError`(self, request, message)` Convenience method for allowing a Controller to report an error to the user.
| ``setNode`(self, node)` Set a node for this widget to use instead of creating one programatically.
| ``setSubmodel`(self, submodel)` I use the submodel to know which attribute in self.model I am responsible for
| `setSubviewFactory(self, name, factory, setup, *args, **kwargs)` (inherited from `View`)
| ``setUp`(self, request, node, data)` Override this method to set up your Widget prior to generateDOM.
| `setupAllStacks(self)` (inherited from `View`)
| `setupViewStack(self)` (inherited from `View`)
| `unlinkViews(self)` (inherited from `View`)

Instance Variable Summary
| `model` - If the current model is an `model.Model`, then the result of model.getData().

Class Variable Summary
`int` | `setupStacks`
`None` | `tagName` - The tag name of the element that this widget creates.
| `wantsAllNotifications` - Indicate that this widget wants to recieve every change notification from the main model, not just notifications that affect its model.

Method Details

### __init__(self, model=None, submodel=None, setup=None, controller=None, viewStack=None, *args, **kwargs)
(Constructor)

  Parameters:
    `model`
    (type=`interfaces.IModel`)
    `submodel` - see `Widget.setSubmodel`
    (type=String)
    `setup`
    (type=Callable)

### __getitem__(self, item)
(Indexing operator)

Convenience syntax for getting an attribute from the resultant DOM Node of this widget.

### __setitem__(self, item, value)
(Index assignment operator)

Convenience syntax for adding attributes to the resultant DOM Node of this widget.

### add(self, item)

Add `item' to the children of the resultant DOM Node of this widget.

  Parameters:
    `item`
    (type=A DOM node or `Widget`.)

### addEventHandler(self, eventName, handler, *args)

Add an event handler to this widget. eventName is a string indicating which javascript event handler should cause this handler to fire. Handler is a callable that has the signature handler(request, widget, *args).

### addUpdateMethod(self, updateMethod)

Add a method to this widget that will be called when the widget is being rendered. The signature for this method should be updateMethod(request, widget, data) where widget will be the instance you are calling addUpdateMethod on.

### cleanNode(self, node)

Do your part, prevent infinite recursion!

### generate(self, request, node)

Allow a view to be used like a widget. Will look up the template file and return it in place of the incoming node.

  Overrides:
    `twisted.web.woven.view.View.generate` (inherited documentation)

### generateDOM(self, request, node)

  Returns:
    A DOM Node to replace the Node in the template that this Widget handles. This Node is created based on `tagName`, `children`, and `attributes` (You should populate these in `setUp`, probably).

### getData(self)

I have a model; however since I am a widget I am only responsible for a portion of that model. This method returns the portion I am responsible for.

The return value of this may be a Deferred; if it is, then `setData` will be called once the result is available.

### getPattern(self, name, default=Element('div', attributes={'style': 'border:&nb..., clone=1)

Get a named slot from the incoming template node. Returns a copy of the node and all its children. If there was more than one node with the same slot identifier, they will be returned in a round-robin fashion.

### initialize(self, *args, **kwargs)

Use this method instead of __init__ to initialize your Widget, so you don't have to deal with calling the __init__ of the superclass.

### insert(self, index, item)

Insert `item' at `index' in the children list of the resultant DOM Node of this widget.

  Parameters:
    `item`
    (type=A DOM node or `Widget`.)

### onEvent(self, request, eventName, *args)

Dispatch a client-side event to an event handler that was registered using addEventHandler.

### setData(self, data)

If the return value of `getData` is a Deferred, I am called when the result of the Deferred is available.

### setError(self, request, message)

Convenience method for allowing a Controller to report an error to the user. When this is called, a Widget of class self.errorFactory is instanciated and set to self.become. When generate is subsequently called, self.become will be responsible for mutating the DOM instead of this widget.

### setNode(self, node)

Set a node for this widget to use instead of creating one programatically. Useful for looking up a node in a template and using that.

### setSubmodel(self, submodel)

I use the submodel to know which attribute in self.model I am responsible for

### setUp(self, request, node, data)

Override this method to set up your Widget prior to generateDOM. This is a good place to call methods like `add`, `insert`, `__setitem__` and `__getitem__`.

Overriding this method obsoletes overriding generateDOM directly, in most cases.

  Parameters:
    `request`
    (type=`twisted.web.server.Request`.)
    `node` - The DOM node which this Widget is operating on.
    `data` - The Model data this Widget is meant to operate upon.

Instance Variable Details

### model

If the current model is an `model.Model`, then the result of model.getData(). Otherwise the original object itself.

Class Variable Details

### setupStacks

  Type:
    `int`
  Value:

        0

### tagName

The tag name of the element that this widget creates. If this is None, then the original Node will be cloned.

  Type:
    `None`
  Value:

        None

### wantsAllNotifications

Indicate that this widget wants to recieve every change notification from the main model, not just notifications that affect its model.

Generated by Epydoc 1.1 on Sat Feb 15 21:18:24 2003 | http://epydoc.sf.net