EventModel.js
3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* @class Ext.calendar.data.EventModel
* @extends Ext.data.Record
* <p>This is the {@link Ext.data.Record Record} specification for calendar event data used by the
* {@link Ext.calendar.CalendarPanel CalendarPanel}'s underlying store. It can be overridden as
* necessary to customize the fields supported by events, although the existing column names should
* not be altered. If your model fields are named differently you should update the <b>mapping</b>
* configs accordingly.</p>
* <p>The only required fields when creating a new event record instance are StartDate and
* EndDate. All other fields are either optional are will be defaulted if blank.</p>
* <p>Here is a basic example for how to create a new record of this type:<pre><code>
rec = new Ext.calendar.data.EventModel({
StartDate: '2101-01-12 12:00:00',
EndDate: '2101-01-12 13:30:00',
Title: 'My cool event',
Notes: 'Some notes'
});
</code></pre>
* If you have overridden any of the record's data mappings via the Ext.calendar.data.EventMappings object
* you may need to set the values using this alternate syntax to ensure that the fields match up correctly:<pre><code>
var M = Ext.calendar.data.EventMappings;
rec = new Ext.calendar.data.EventModel();
rec.data[M.StartDate.name] = '2101-01-12 12:00:00';
rec.data[M.EndDate.name] = '2101-01-12 13:30:00';
rec.data[M.Title.name] = 'My cool event';
rec.data[M.Notes.name] = 'Some notes';
</code></pre>
* @constructor
* @param {Object} data (Optional) An object, the properties of which provide values for the new Record's
* fields. If not specified the {@link Ext.data.Field#defaultValue defaultValue}
* for each field will be assigned.
* @param {Object} id (Optional) The id of the Record. The id is used by the
* {@link Ext.data.Store} object which owns the Record to index its collection
* of Records (therefore this id should be unique within each store). If an
* id is not specified a {@link #phantom}
* Record will be created with an {@link #Record.id automatically generated id}.
*/
Ext.define('Ext.calendar.data.EventModel', {
extend: 'Ext.data.Model',
requires: [
'Ext.util.MixedCollection',
'Ext.calendar.data.EventMappings'
],
statics: {
/**
* Reconfigures the default record definition based on the current {@link Ext.calendar.data.EventMappings EventMappings}
* object. See the header documentation for {@link Ext.calendar.data.EventMappings} for complete details and
* examples of reconfiguring an EventRecord.
* @method create
* @static
* @return {Function} The updated EventRecord constructor function
*/
reconfigure: function() {
var Data = Ext.calendar.data,
Mappings = Data.EventMappings,
proto = Data.EventModel.prototype,
fields = [];
// It is critical that the id property mapping is updated in case it changed, since it
// is used elsewhere in the data package to match records on CRUD actions:
proto.idProperty = Mappings.EventId.name || 'id';
for(prop in Mappings){
if(Mappings.hasOwnProperty(prop)){
fields.push(Mappings[prop]);
}
}
proto.fields.clear();
for(var i = 0, len = fields.length; i < len; i++){
proto.fields.add(Ext.create('Ext.data.Field', fields[i]));
}
return Data.EventModel;
}
}
},
function(){
Ext.calendar.data.EventModel.reconfigure();
});