OSDN Git Service

166b497e22d15059b994e1fc273f8f5c1a9fdcaf
[pettanr/pettanr.git] / app / assets / javascripts / locmare / form / field / tag / select.js.coffee
1 class Locmare.FormModule.FieldModule.TagModule.SelectTag extends Locmare.FormModule.FieldModule.TagModule.Base\r
2   tagName: 'select'\r
3   events: {\r
4     'change': 'change'\r
5   }\r
6   \r
7   render: () ->\r
8     @select_values((members) =>\r
9       values = if @model_attribute_manifest().source.translate()\r
10         Pettanr.AppHelper.t_select_items(members)\r
11       else\r
12         members\r
13       this.$el.html('')\r
14       this.$el.attr(@attr())\r
15       _.each values, (member) =>\r
16         selected = if @is_selected(member)\r
17           ' selected'\r
18         else\r
19           ''\r
20         this.$el.append('<option value="' + member[1] + '"' + selected + '>' + member[0] + '</option>')\r
21     )\r
22     this\r
23   \r
24   model_manifest: () ->\r
25     Manifest.manifest().models[@field.field_manifest.item_name()]\r
26   \r
27   model_attribute_manifest: () ->\r
28     @model_manifest().attributes[@field.field_manifest.column_name()]\r
29   \r
30   select_item_name: () ->\r
31     @model_attribute_manifest().source.select_item_name\r
32   \r
33   source_by_filter: () ->\r
34     switch @model_attribute_manifest().source.type\r
35       when 'model', 'filter'\r
36         true\r
37       when 'magic_number'\r
38         false\r
39       else\r
40         null\r
41   \r
42   is_selected: (member) ->\r
43     @value() == member[1]\r
44   \r
45   select_values: (cb) ->\r
46     if @source_by_filter()\r
47       resource_item_name = @model_attribute_manifest().source.resource_item_name\r
48       resource_action_name = @model_attribute_manifest().source.resource_action_name\r
49       filter_column_name = @model_attribute_manifest().source.filter_column_name\r
50       filter_id = @form().item.get(filter_column_name)\r
51       resource_controller_name = Manifest.manifest().models[resource_item_name].classify().table_name()\r
52       caption_name = @model_attribute_manifest().source.caption_name\r
53       params = if filter_column_name\r
54         {id: filter_id}\r
55       else\r
56         {}\r
57       list = Locmare.ListGroup.list(resource_controller_name, resource_action_name, params)\r
58       list.open((page_status) ->\r
59         members = _.map list.models, (member) ->\r
60           [member.get(caption_name), member.get('id')]\r
61         cb(members)\r
62       )\r
63     else\r
64       members = Manifest.manifest().system_resources.select_items[@select_item_name()]\r
65       cb(members)\r
66   \r
67   change: () ->\r
68     @field.trigger('change')\r
69   \r