PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/generator/views/views/finder.js

http://github.com/jspears/bobamo
JavaScript | 133 lines | 117 code | 14 blank | 2 comment | 19 complexity | a9a712a6acb932a3a2e0f9983324d4f0 MD5 | raw file
Possible License(s): Apache-2.0
  1. // Filename: ${baseUrl}/js/views/finder.js
  2. define(
  3. [ 'underscore',
  4. 'Backbone',
  5. 'Backbone.Form',
  6. 'backbone-modal',
  7. 'libs/bobamo/list',
  8. 'collections/${collection}',
  9. 'text!templates/${collection}/table.html',
  10. 'text!templates/${collection}/table-item.html'
  11. ]
  12. , function (_, B, Form, Modal, View, collection, tableTemplate, tableItemTemplate) {
  13. "use strict";
  14. var finder = {{json finder }}
  15. var qform = {{json model}};
  16. // var qform = _.extend({schema:_qform.paths}, _.omit(_qform, 'paths'));
  17. var Model = B.Model.extend(qform);
  18. var FinderModel = new Model;
  19. define('findermodel/${model.modelName}/${view}', function () {
  20. return FinderModel;
  21. })
  22. return View.extend({
  23. collection:collection,
  24. events:_.extend({}, View.prototype.events, {
  25. submit:'onFormSubmit',
  26. 'click .open-modal':'onOpenModalClick'
  27. }),
  28. initialize:function () {
  29. View.prototype.initialize.apply(this, _.toArray(arguments));
  30. if (qform.schema) {
  31. this.model = FinderModel;
  32. this.form = new Form({model:this.model});
  33. _.each(this.model.events, function (k, v) {
  34. this.form.on(v, _.bind(this[k], this));
  35. }, this)
  36. }
  37. },
  38. onFormSubmit:function (e) {
  39. if (e && e.preventDefault)
  40. e.preventDefault();
  41. console.log('onFormSubmit', this.form.getValue());
  42. if (finder.display.method !== 'GET') {
  43. console.log('method is ', finder.display.method, 'Not implemented');
  44. }
  45. this.$paginate.paginate('update', {skip:0}); //reset the skip.
  46. this.update(null, {skip:0});
  47. },
  48. onOpenModalClick:function (e) {
  49. var data = $(e.currentTarget).data('data') || e;
  50. if (!data) {
  51. console.log('no data from target');
  52. return;
  53. }
  54. var view = data.href;
  55. var idx = view.indexOf('#');
  56. if (~idx) {
  57. view = view.substring(idx + 1);
  58. }
  59. var viewArr = _.isArray(view) ? view : [view];
  60. var self = this;
  61. require(viewArr, function (V) {
  62. var m = new Modal({
  63. content:new V
  64. }).open()
  65. });
  66. return false;
  67. },
  68. update:function (mesg, data) {
  69. View.prototype.update.call(this, mesg, _.extend({}, data, this.form && this.form.getValue() || null));
  70. },
  71. template:_.template(tableTemplate),
  72. render:function () {
  73. View.prototype.render.apply(this, arguments);
  74. if (this.model && this.model.schema) {
  75. var buttons = this.model.buttons;
  76. collection.finder = this.model;
  77. var form = this.form.render();
  78. var $div = $('<div class="form-actions"><input type="reset" class="btn" value="Clear"></div>');
  79. console.log('btns', buttons);
  80. var btns = _.map(buttons, function (v) {
  81. console.log('buttons', v);
  82. if (_.isString(v)) {
  83. return $(v);
  84. } else {
  85. var $a = $(v.type || '<a></a>');
  86. $a.attr('href', v.href);
  87. $a.addClass(v.clsNames);
  88. $a.html(v.html);
  89. $a.data('data', v);
  90. return $a;
  91. }
  92. });
  93. if (btns && btns.length) {
  94. if (btns.length > 1) {
  95. var $d = $('<div class="btn-group pull-right"></div>');
  96. $d.append.apply($d, btns);
  97. $div.append($d)
  98. } else {
  99. btns[0].addClass('pull-right');
  100. $div.append.apply($div, btns);
  101. }
  102. } else {
  103. $div.append('<button type="submit" class="btn pull-right btn-primary save finish">Submit</button>');
  104. }
  105. form.$el.append($div);
  106. this.$el.find('.table').before(form.el);
  107. }
  108. this.$table.find('.title').append(" &gt; <span>${model.title}</span>")
  109. return this;
  110. },
  111. listItemTemplate:_.template(tableItemTemplate),
  112. config:{
  113. title:'${finder.title}',
  114. modelName:'${modelName}',
  115. plural:'${model.plural}'
  116. }
  117. });
  118. })
  119. ;