- Timestamp:
- 23 Jul 2009, 00:49:50 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
waeup/branches/ulif-rewrite/src/waeup/widgets/table.txt
r4405 r4420 36 36 mytable 37 37 38 YUITable 39 -------- 40 41 A YUI table extends a regular table by adding some JavaScript 42 code-generation facilities suitable for rendering YUI based 43 datatables. Futhermore they provide a `need` method, which includes 44 all needed YUI scripts and stylesheets. 45 46 47 >>> from waeup.widgets.table import YUITable 48 >>> table = YUITable('My YUI Table', cols=(id, mycol1, mycol2)) 49 >>> print table.getJSTableCode() 50 <BLANKLINE> 51 YAHOO.util.Event.addListener(window, "load", function() {... 52 ... 53 draggableColumns:true }); 54 }); 55 56 Naturally, YUITable objects are suited for use by views. 57 58 59 YUIStaticTableView 60 ================== 61 62 This is a view named ``yuistatictables.js`` which from a users' 63 perspective can be used like a static file. It is, however, not 64 static, but returns the JavaScript code suitable for a given table. 65 66 We define some content object that contains a table for which we want 67 the JavaScript to be generated: 68 69 >>> class SomeContent(object): 70 ... mytable = table 71 72 >>> obj = SomeContent() 73 74 Now we need an adapter, that knows how to get a table from this kind 75 of object. The YUIStaticTableView looks up such an adapter for a given 76 context to find a table to manage. The adapter has to implement 77 `ITableProvider` from `waeup.widgets.interfaces` and should provide a 78 `getTable` method. 79 80 We define and register such an adapter using grok: 81 82 >>> import grok 83 >>> grok.testing.grok('waeup') 84 >>> from waeup.widgets.interfaces import ITableProvider 85 >>> class TableAdapter(grok.Adapter): 86 ... grok.context(SomeContent) 87 ... grok.provides(ITableProvider) 88 ... 89 ... def getTable(self): 90 ... # We know that our context stores a table in `mytable` 91 ... return self.context.mytable 92 >>> grok.testing.grok_component('TableAdapter', TableAdapter) 93 True 94 95 Now let's get a view on the object defined above. We want the view 96 named ``yuistatictables.js``: 97 98 >>> from zope.publisher.browser import TestRequest 99 >>> from zope.component import getMultiAdapter 100 >>> from zope.interface import Interface 101 >>> view = getMultiAdapter((obj, TestRequest()), Interface, 102 ... name='yuistatictables.js') 103 >>> view 104 <waeup.widgets.table.YUIStaticTableView object at 0x...> 105 106 When we call the view we get pure JavaScript: 107 108 >>> print view() 109 <BLANKLINE> 110 YAHOO.util.Event.addListener(window, "load", function() { 111 ... 112 draggableColumns:true }); 113 }); 114 115 Table views for objects that have no table 116 ------------------------------------------ 117 118 What happens, when no `ITableProvider` can be found for an object? The 119 view will return an empty string. 120 121 Let's try this with a simple object for which no adapter is 122 registered. We can get the view: 123 124 >>> obj = object() 125 >>> view = getMultiAdapter((obj, TestRequest()), Interface, 126 ... name='yuistatictables.js') 127 >>> view 128 <waeup.widgets.table.YUIStaticTableView object at 0x...> 129 130 But if we call this adapter, we will get an empty result, because 131 there is no ITableProvider adapter registered for the 'viewed' object: 132 133 >>> view() 134 ''
Note: See TracChangeset for help on using the changeset viewer.