extjs-mvc 0.4.0.f → 0.4.0.g

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/Rakefile +2 -2
  2. data/VERSION +1 -1
  3. data/bin/extjs-mvc +0 -3
  4. data/lib/extjs-mvc.rb +10 -6
  5. data/lib/extjs-mvc/api.rb +0 -1
  6. metadata +8 -84
  7. data/lib/src/App.js +0 -219
  8. data/lib/src/MVC.js +0 -260
  9. data/lib/src/Presenter.js +0 -52
  10. data/lib/src/README.rdoc +0 -69
  11. data/lib/src/controller/Controller.js +0 -278
  12. data/lib/src/controller/CrudController.js +0 -460
  13. data/lib/src/lib/Array.js +0 -26
  14. data/lib/src/lib/Booter.js +0 -416
  15. data/lib/src/lib/ClassManager.js +0 -191
  16. data/lib/src/lib/ControllerClassManager.js +0 -95
  17. data/lib/src/lib/Dependencies.js +0 -44
  18. data/lib/src/lib/DispatchMatcher.js +0 -98
  19. data/lib/src/lib/Dispatcher.js +0 -129
  20. data/lib/src/lib/Environment.js +0 -43
  21. data/lib/src/lib/Inflector.js +0 -155
  22. data/lib/src/lib/ModelClassManager.js +0 -19
  23. data/lib/src/lib/Route.js +0 -139
  24. data/lib/src/lib/Router.js +0 -282
  25. data/lib/src/lib/String.js +0 -94
  26. data/lib/src/lib/ViewClassManager.js +0 -229
  27. data/lib/src/lib/notes.txt +0 -32
  28. data/lib/src/model/AdapterManager.js +0 -30
  29. data/lib/src/model/Association.js +0 -26
  30. data/lib/src/model/Base.js +0 -63
  31. data/lib/src/model/BelongsToAssociation.js +0 -116
  32. data/lib/src/model/Cache.js +0 -131
  33. data/lib/src/model/HasManyAssociation.js +0 -160
  34. data/lib/src/model/Model.js +0 -331
  35. data/lib/src/model/UrlBuilder.js +0 -106
  36. data/lib/src/model/adapters/AbstractAdapter.js +0 -296
  37. data/lib/src/model/adapters/MemoryAdapter.js +0 -103
  38. data/lib/src/model/adapters/RESTAdapter.js +0 -345
  39. data/lib/src/model/adapters/RESTJSONAdapter.js +0 -68
  40. data/lib/src/model/adapters/notes.txt +0 -42
  41. data/lib/src/model/associations/Association.js +0 -192
  42. data/lib/src/model/associations/notes.txt +0 -87
  43. data/lib/src/model/validations/Errors.js +0 -136
  44. data/lib/src/model/validations/Plugin.js +0 -139
  45. data/lib/src/model/validations/Validations.js +0 -276
  46. data/lib/src/notes/Charts.graffle +0 -0
  47. data/lib/src/overrides/Ext.Component.js +0 -21
  48. data/lib/src/overrides/Ext.extend.js +0 -142
  49. data/lib/src/spec/Array.spec.js +0 -15
  50. data/lib/src/spec/ExtMVC.spec.js +0 -65
  51. data/lib/src/spec/Model.spec.js +0 -370
  52. data/lib/src/spec/OS.spec.js +0 -83
  53. data/lib/src/spec/Router.spec.js +0 -99
  54. data/lib/src/spec/SpecHelper.js +0 -106
  55. data/lib/src/spec/String.spec.js +0 -83
  56. data/lib/src/spec/model/AbstractAdapter.spec.js +0 -49
  57. data/lib/src/spec/model/Associations.spec.js +0 -99
  58. data/lib/src/spec/model/Cache.spec.js +0 -5
  59. data/lib/src/spec/model/RESTAdapter.spec.js +0 -19
  60. data/lib/src/spec/model/ValidationErrors.spec.js +0 -64
  61. data/lib/src/spec/model/Validations.spec.js +0 -166
  62. data/lib/src/spec/model/ValidationsPlugin.spec.js +0 -108
  63. data/lib/src/spec/suite.html +0 -60
  64. data/lib/src/specs-old/JSSpec.css +0 -216
  65. data/lib/src/specs-old/JSSpec.js +0 -1512
  66. data/lib/src/specs-old/all.html +0 -66
  67. data/lib/src/specs-old/base.js +0 -14
  68. data/lib/src/specs-old/controller.js +0 -17
  69. data/lib/src/specs-old/diff_match_patch.js +0 -1
  70. data/lib/src/specs-old/model.js +0 -70
  71. data/lib/src/specs-old/route.js +0 -38
  72. data/lib/src/specs-old/router.js +0 -59
  73. data/lib/src/specs-old/string.js +0 -22
  74. data/lib/src/testrunner/JSpecFormatter.js +0 -111
  75. data/lib/src/testrunner/TestClient.js +0 -181
  76. data/lib/src/testrunner/TestGrid.js +0 -351
  77. data/lib/src/testrunner/TestRunner.js +0 -110
  78. data/lib/src/testrunner/TestViewport.js +0 -94
  79. data/lib/src/vendor.yml +0 -29
  80. data/lib/src/vendor/ext-3.1.1/vendor.yml +0 -16
  81. data/lib/src/view/FormWindow.js +0 -184
  82. data/lib/src/view/HasManyEditorGridPanel.js +0 -211
  83. data/lib/src/view/scaffold/Edit.js +0 -46
  84. data/lib/src/view/scaffold/Index.js +0 -561
  85. data/lib/src/view/scaffold/New.js +0 -20
  86. data/lib/src/view/scaffold/ScaffoldFormPanel.js +0 -255
@@ -1,26 +0,0 @@
1
- /**
2
- * @class Array
3
- * Extensions to the array class
4
- */
5
-
6
- /**
7
- * Turns an array into a sentence, joined by a specified connector - e.g.:
8
- * ['Adama', 'Tigh', 'Roslin'].toSentence(); //'Adama, Tigh and Roslin'
9
- * ['Adama', 'Tigh', 'Roslin'].toSentence('or'); //'Adama, Tigh or Roslin'
10
- * @param {String} connector The string to use to connect the last two words. Usually 'and' or 'or', defaults to 'and'
11
- */
12
- Array.prototype.toSentence = function(connector) {
13
- connector = connector || 'and';
14
-
15
- var sentence = "";
16
- if (this.length <= 1) {
17
- sentence = this[0];
18
- } else {
19
- //we'll join all but the last error with commas
20
- var firstErrors = this.slice(0, this.length - 1);
21
-
22
- //add the last error, with the connector string
23
- sentence = String.format("{0} {1} {2}", firstErrors.join(", "), connector, this[this.length - 1]);
24
- }
25
- return sentence;
26
- };
@@ -1,416 +0,0 @@
1
- /**
2
- * @class ExtMVC.lib.Booter
3
- * @extends Ext.util.Observable
4
- * Boots an Ext MVC application by loading all application files and launching
5
- */
6
- ExtMVC.lib.Booter = Ext.extend(Ext.util.Observable, {
7
-
8
- /**
9
- * @property defaultBootParams
10
- * @type Object
11
- * Contains default boot parameters (e.g. sets the default environment to 'production')
12
- */
13
- defaultBootParams: {
14
- environment: 'production'
15
- },
16
-
17
- constructor: function(config) {
18
- config = config || {};
19
- Ext.applyIf(config, this.parseLocationParams());
20
- Ext.apply(this, config, this.defaultBootParams);
21
-
22
- ExtMVC.lib.Booter.superclass.constructor.apply(this, arguments);
23
-
24
- this.initEvents();
25
- this.initListeners();
26
- },
27
-
28
- /**
29
- * The Booter loads some code asynchronously, so uses events to proceed the logic. This sets up
30
- * all of the internal event monitoring.
31
- */
32
- initListeners: function() {
33
- this.on('environment-loaded', this.loadApplicationFiles, this);
34
-
35
- this.on({
36
- scope : this,
37
- 'environment-loaded' : this.loadApplicationFiles,
38
- 'application-files-loaded': this.launchApp,
39
- 'boot-complete' : this.onBootComplete
40
- });
41
- },
42
-
43
- /**
44
- * Sets up events emitted by this component
45
- */
46
- initEvents: function() {
47
- this.addEvents(
48
- /**
49
- * @event before-boot
50
- * Called just before boot starts. Use this as a hook to tie in any pre-boot logic
51
- * @param {ExtMVC.lib.Booter} this The Booter instance
52
- */
53
- 'before-boot',
54
-
55
- /**
56
- * @event boot-complete
57
- * Fires when the entire boot sequence has been completed
58
- */
59
- 'boot-complete',
60
-
61
- /**
62
- * @event environment-loaded
63
- * Fires when environment config data has been retrieved
64
- * @param {ExtMVC.Environment} environment the Ext.Environment object
65
- */
66
- 'environment-loaded',
67
-
68
- /**
69
- * @event app-files-loaded
70
- * Fires when all application files (overrides, config, models, views and controllers)
71
- * have been loaded and are available
72
- */
73
- 'application-files-loaded',
74
-
75
- /**
76
- * @event application-launched
77
- * Fires after the application has been launched
78
- */
79
- 'application-launched'
80
- );
81
- },
82
-
83
- boot: function() {
84
- this.fireEvent('before-boot');
85
-
86
- if (this.useLoadingMask) this.addLoadingMask();
87
-
88
- this.loadEnvironment();
89
- },
90
-
91
- /**
92
- * Called when the app has been fully booted. Override to provide you own logic (defaults to an empty function)
93
- */
94
- onBootComplete: function() {},
95
-
96
- /**
97
- * Loads up the current environment by loading config/environment.json, and the appropriate file from within
98
- * config/environments/ for the current environment (e.g. config/environments/production.json)
99
- */
100
- loadEnvironment: function() {
101
- Ext.Ajax.request({
102
- url : '/config/environment.json',
103
- scope : this,
104
- success: function(response, options) {
105
- var envName = this.environment;
106
-
107
- this.environment = new ExtMVC.Environment(Ext.decode(response.responseText));
108
-
109
- Ext.Ajax.request({
110
- url : String.format("/config/environments/{0}.json", envName),
111
- success: function(response, options) {
112
- this.environment.update(Ext.decode(response.responseText));
113
-
114
- this.fireEvent('environment-loaded', this.environment);
115
- },
116
- scope : this
117
- });
118
- },
119
- failure: function() {
120
- Ext.Msg.alert(
121
- 'Could not load environment',
122
- 'The environment could not be found'
123
- );
124
- }
125
- });
126
- },
127
-
128
- /**
129
- * Loads all required application files, fires the 'app-files-loaded' event when done
130
- * @param {ExtMVC.Environment} environment The ExtMVC.Environment to gather file list from
131
- */
132
- loadApplicationFiles: function(env) {
133
- this.loadStylesheets(env);
134
-
135
- //if the 'scripts' property on the Environment is present then models, controllers, plugins etc are ignored
136
- if (Ext.isArray(env.scripts)) { //&& env.scripts.length > 0) {
137
- if (env.scripts.length == 0) {
138
- this.fireEvent('application-files-loaded');
139
- } else {
140
- this.loadFiles(env.scripts, false, function() {
141
- this.fireEvent('application-files-loaded');
142
- }, this);
143
- }
144
-
145
- return;
146
- }
147
-
148
-
149
- var order = ['overrides', 'config', 'plugins', 'models', 'controllers', 'views'],
150
- baseFiles = [],
151
- pluginFiles = [],
152
- modelFiles = [],
153
- controllerFiles = [],
154
- viewFiles = [];
155
-
156
- // var groups = {
157
- // 'base': {preserveOrder: false, }
158
- // };
159
-
160
- var underscore = ExtMVC.Inflector.underscore;
161
-
162
- Ext.each(env.config, function(file) {
163
- baseFiles.push(String.format("../{0}.js", file));
164
- }, this);
165
-
166
- Ext.each(env.plugins, function(file) {
167
- pluginFiles.push(String.format("{0}/{1}/{2}-all.js", env.pluginsDir, file, file));
168
- }, this);
169
-
170
- Ext.each(env.overrides, function(file) {
171
- pluginFiles.push(String.format("{0}/{1}.js", env.overridesDir, file));
172
- }, this);
173
-
174
- Ext.each(env.models, function(file) {
175
- modelFiles.push(String.format("{0}/models/{1}.js", env.appDir, underscore(file)));
176
- }, this);
177
-
178
- Ext.each(env.controllers, function(file) {
179
- controllerFiles.push(String.format("{0}/controllers/{1}_controller.js", env.appDir, underscore(file)));
180
- }, this);
181
-
182
- Ext.each(env.views, function(viewObj) {
183
- Ext.iterate(viewObj, function(dir, fileList) {
184
- Ext.each(fileList, function(file) {
185
- viewFiles.push(String.format("{0}/views/{1}/{2}.js", env.appDir, dir, file));
186
- }, this);
187
- }, this);
188
- }, this);
189
-
190
- var me = this;
191
- var doFireEvent = function() {
192
- me.fireEvent('application-files-loaded');
193
- };
194
-
195
- this.loadFiles(baseFiles, false, function() {
196
- this.loadFiles(pluginFiles, false, function() {
197
- this.loadFiles(modelFiles, false, function() {
198
- this.loadFiles(controllerFiles, true, function() {
199
- this.loadFiles(viewFiles, true, function() {
200
- doFireEvent();
201
- });
202
- });
203
- });
204
- });
205
- });
206
- },
207
-
208
- /**
209
- * Once all application files are loaded, this launches the application, hides the loading mask, fires the
210
- * 'application-launched' event
211
- */
212
- launchApp: function() {
213
- ExtMVC.app.onReady();
214
-
215
- if (this.useLoadingMask) this.removeLoadingMask();
216
-
217
- this.fireEvent('application-launched');
218
- this.fireEvent('boot-complete');
219
- },
220
-
221
- /**
222
- * @property useLoadingMask
223
- * @type Boolean
224
- * True to automatically add an application loading mask layer to give the user loading feedback (defaults to false)
225
- */
226
- useLoadingMask: false,
227
-
228
- /**
229
- * Adds loading mask HTML elements to the page (called at start of bootup)
230
- */
231
- addLoadingMask: function() {
232
- var body = Ext.getBody();
233
-
234
- body.createChild({
235
- id: 'loading-mask'
236
- });
237
-
238
- body.createChild({
239
- id: 'loading',
240
- cn: [{
241
- cls: 'loading-indicator',
242
- html: this.getLoadingMaskMessage()
243
- }]
244
- });
245
- },
246
-
247
- /**
248
- * Returns the loading mask message string. Override this to provide your own
249
- * @return {String} The message to place inside the loading mask (defaults to "Loading...")
250
- */
251
- getLoadingMaskMessage: function() {
252
- return "Loading...";
253
- },
254
-
255
- /**
256
- * @property loadingMaskFadeDelay
257
- * @type Number
258
- * Number of milliseconds after app launch is called before the loading mask will fade away.
259
- * Gives your app a little time to draw its UI (defaults to 250)
260
- */
261
- loadingMaskFadeDelay: 250,
262
-
263
- /**
264
- * Fades out the loading mask (called after bootup is complete)
265
- */
266
- removeLoadingMask: function() {
267
- (function(){
268
- Ext.get('loading').remove();
269
- Ext.get('loading-mask').fadeOut({remove:true});
270
- }).defer(this.loadingMaskFadeDelay);
271
- },
272
-
273
- /**
274
- * @private
275
- * Inspects document.location and returns an object containing all of the url params
276
- * @return {Object} The url params
277
- */
278
- parseLocationParams: function() {
279
- var args = window.location.search.split("?")[1],
280
- params = {};
281
-
282
- /**
283
- * Read config data from url parameters
284
- */
285
- if (args != undefined) {
286
- Ext.each(args.split("&"), function(arg) {
287
- var splits = arg.split("="),
288
- key = splits[0],
289
- value = splits[1];
290
-
291
- params[key] = value;
292
- }, this);
293
- }
294
-
295
- return params;
296
- },
297
-
298
- /**
299
- * Inserts <link> tags to load stylesheets contained in the environment
300
- * @param {ExtMVC.lib.Environment} env The environment to load stylesheets from
301
- */
302
- loadStylesheets: function(env) {
303
-
304
- var body = Ext.getBody();
305
- Ext.each(env.stylesheets, function(filename) {
306
- body.createChild({
307
- tag : 'link',
308
- rel : 'stylesheet',
309
- type: 'text/css',
310
- href: this.linkToStylesheet(filename)
311
- });
312
- }, this);
313
- },
314
-
315
- linkToStylesheet: function(filename) {
316
- if (filename.match(/^http:/)) {
317
- return filename
318
- } else if (filename[0] === '/') {
319
- return String.format("/public{0}.css", filename);
320
- } else {
321
- return String.format("/public/stylesheets/{0}.css", filename)
322
- }
323
- },
324
-
325
- /**
326
- * Creates and returns a script tag, but does not place it into the document. If a callback function
327
- * is passed, this is called when the script has been loaded
328
- * @param {String} filename The name of the file to create a script tag for
329
- * @param {Function} callback Optional callback, which is called when the script has been loaded
330
- * @return {Element} The new script ta
331
- */
332
- buildScriptTag: function(filename, callback) {
333
- var script = document.createElement('script');
334
- script.type = "text/javascript";
335
- script.src = filename;
336
-
337
- //IE has a different way of handling <script> loads, so we need to check for it here
338
- if (script.readyState) {
339
- script.onreadystatechange = function(){
340
- if (script.readyState == "loaded" || script.readyState == "complete") {
341
- script.onreadystatechange = null;
342
- callback();
343
- }
344
- };
345
- } else {
346
- script.onload = callback;
347
- }
348
-
349
- return script;
350
- },
351
-
352
- /**
353
- * Loads a given set of application .js files. Calls the callback function when all files have been loaded
354
- * Set preserveOrder to true to ensure non-parallel loading of files, if load ordering is important
355
- * @param {Array} fileList Array of all files to load
356
- * @param {Boolean} preserveOrder True to make files load in serial, one after the other (defaults to false)
357
- * @param {Function} callback Callback to call after all files have been loaded
358
- * @param {Object} scope The scope to call the callback in
359
- */
360
- loadFiles: function(fileList, preserveOrder, callback, scope) {
361
- var scope = scope || this,
362
- head = document.getElementsByTagName("head")[0],
363
- fragment = document.createDocumentFragment(),
364
- numFiles = fileList.length,
365
- loadedFiles = 0,
366
- me = this;
367
-
368
- if (fileList.length == 0) {
369
- callback.call(scope);
370
- return;
371
- }
372
-
373
- /**
374
- * Loads a particular file from the fileList by index. This is used when preserving order
375
- */
376
- var loadFileIndex = function(index) {
377
- head.appendChild(
378
- me.buildScriptTag(fileList[index], onFileLoaded)
379
- );
380
- };
381
-
382
- /**
383
- * Callback function which is called after each file has been loaded. This calls the callback
384
- * passed to loadFiles once the final file in the fileList has been loaded
385
- */
386
- var onFileLoaded = function() {
387
- loadedFiles ++;
388
-
389
- //if this was the last file, call the callback, otherwise load the next file
390
- if (numFiles == loadedFiles && Ext.isFunction(callback)) {
391
- callback.call(scope);
392
- } else {
393
- if (preserveOrder === true) loadFileIndex(loadedFiles);
394
- }
395
- };
396
-
397
- if (preserveOrder === true) {
398
- loadFileIndex.call(this, 0);
399
- } else {
400
- //load each file (most browsers will do this in parallel)
401
- Ext.each(fileList, function(file, index) {
402
- fragment.appendChild(
403
- this.buildScriptTag(file, onFileLoaded)
404
- );
405
- }, this);
406
-
407
- head.appendChild(fragment);
408
- }
409
- }
410
- });
411
-
412
- Ext.onReady(function() {
413
- ExtMVC.booter = new ExtMVC.lib.Booter();
414
-
415
- ExtMVC.booter.boot();
416
- });
@@ -1,191 +0,0 @@
1
- ExtMVC.lib.ClassManager = Ext.extend(Ext.util.Observable, {
2
- /**
3
- * @property autoDefine
4
- * @type Boolean
5
- * If true, the ClassManager will attempt to define classes immediately via this.define (defaults to true)
6
- */
7
- autoDefine: true,
8
-
9
- constructor: function constructor(config) {
10
- config = config || {};
11
-
12
- Ext.applyIf(config, {
13
- /**
14
- * @property registeredClasses
15
- * @type Object
16
- * {name: config} mapping of all registered classes
17
- */
18
- registeredClasses: {},
19
-
20
- /**
21
- * @property constructors
22
- * @type Object
23
- * {name: Function} mapping of all registered classes to their constructor functions
24
- */
25
- constructors: {}
26
- });
27
-
28
- Ext.apply(this, config);
29
-
30
- this.addEvents(
31
- /**
32
- * @event class-registered
33
- * Fires when a class has been registered to this package
34
- * @param {String} name The name of the class
35
- * @param {Object} config The class config object
36
- */
37
- 'class-registered',
38
-
39
- /**
40
- * @event class-defined
41
- * Fires after a class has been registered and then defined using Ext.extend
42
- * @param {String} name The name of the class
43
- * @param {Function} constructor The class constructor
44
- */
45
- 'class-defined'
46
- );
47
-
48
- // this.on({
49
- // scope : this,
50
- // 'class-registered': this.afterRegister,
51
- // 'class-defined' : this.afterDefine
52
- // });
53
- },
54
-
55
- /**
56
- * Registers a config object or class constructor to a given class name
57
- * @param {String} name The name to register this class under
58
- * @param {Object/Function} config Either a config object or a constructor function
59
- */
60
- register: function register(name, config) {
61
- this.registeredClasses[name] = config;
62
-
63
- this.fireEvent('class-registered', name, config);
64
-
65
- if (this.autoDefine === true) this.define(name);
66
- },
67
-
68
- /**
69
- * Returns the config object for a given class name. Only really useful privately
70
- * @param {String} name The name of the class
71
- * @return {Object} The config object for this class
72
- */
73
- getRegistered: function getRegistered(name) {
74
- return this.registeredClasses[name];
75
- },
76
-
77
- /**
78
- * Defines the given class name by using Ext.extend to declare it. The result of Ext.extend
79
- * is then stored in this.constructors, and the constructor can then be retrieved with this.getConstructor(name)
80
- * @param {String} name The name of the class to define
81
- * @return {Function} The newly defined class constructor
82
- */
83
- define: function define(name) {
84
- console.log('defining');
85
- console.log(name);
86
-
87
- var overrides = this.getRegistered(name);
88
-
89
- //extend the parent object and register the constructor
90
- var klass = Ext.extend(this.getConstructor(overrides.extend), overrides);
91
- this.constructors[name] = klass;
92
-
93
- this.fireEvent('class-defined', name, klass);
94
-
95
- return klass;
96
- },
97
-
98
- /**
99
- * Returns the constructor function for a registered class name. If the constructor
100
- * itself hasn't been defined yet, it is defined first using this.define(), then returned
101
- * @param {String} name The name of the class to return the constructor for
102
- * @return {Function} The constructor function
103
- */
104
- getConstructor: function getConstructor(name) {
105
- return this.constructors[name] || this.define(name);
106
- }
107
- });
108
-
109
- /**
110
- * Ideal syntax after these changes:
111
- */
112
-
113
- // ExtMVC.registerView('index', 'index', {
114
- // xtype: "panel",
115
- // title: "Welcome to Ext MVC",
116
- // html : "This is a test"
117
- // });
118
- //
119
- // Ext.registerController("index", {
120
- // index: function() {
121
- // this.render("index", {
122
- // title: "Different Title"
123
- // });
124
- // },
125
- //
126
- // //this would actually be here by default
127
- // welcome: function() {
128
- // this.render("index");
129
- // },
130
- //
131
- // //if we give the function a name, we can accept alternative render format:
132
- // //all MVC Crud controller methods can be made like this
133
- // search: function search() {
134
- // this.render({
135
- // //options for new MyApp.views.index.search
136
- // });
137
- // },
138
- //
139
- // create: function(data) {
140
- // var newUser = ExtMVC.buildModel("SuperUser", data);
141
- //
142
- // newUser.save({
143
- // success: function(user) {
144
- //
145
- // },
146
- // failure: function(user) {
147
- //
148
- // }
149
- // });
150
- //
151
- // //or how about
152
- // ExtMVC.createModel("SuperUser", data, {
153
- // success: function(user) {
154
- //
155
- // },
156
- // failure: function(user) {
157
- //
158
- // }
159
- // });
160
- // },
161
- //
162
- // update: function(user, changes) {
163
- // user.update(changes, {
164
- // success: function(user) {
165
- //
166
- // },
167
- // failure: function(user) {
168
- //
169
- // }
170
- // });
171
- // }
172
- // });
173
- //
174
- // ExtMVC.registerController("someSubController", {
175
- // extend: "index",
176
- //
177
- // index: function() {
178
- // this.superclass.index.call(this);
179
- // }
180
- // });
181
- //
182
- //
183
- // ExtMVC.registerModel("SuperUser", {
184
- // extend: "User",
185
- // fields: [
186
- // {name: 'id', type: 'int'}
187
- // ]
188
- // });
189
-
190
-
191
-