luca 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -80,4 +80,7 @@
80
80
  Simply trigger enable:loadmask and disable:loadmask on any view where loadMask is set to true
81
81
 
82
82
  0.9.0
83
- - Introducing Luca.components.CollectionView
83
+ - Introducing Luca.components.CollectionView
84
+
85
+ 0.9.1
86
+ - Bugfix Release
@@ -2,7 +2,6 @@ Sandbox.Application = Luca.Application.extend
2
2
  name: 'sandbox_application'
3
3
  el: '#viewport'
4
4
  fluid: true
5
-
6
5
  topNav:'top_navigation'
7
6
 
8
7
  useKeyRouter: true
@@ -16,6 +15,7 @@ Sandbox.Application = Luca.Application.extend
16
15
  name: 'pages'
17
16
  components:[
18
17
  name: "main"
18
+ ctype: "panel"
19
19
  bodyTemplate: 'main'
20
20
  ,
21
21
  name :"class_browser"
@@ -20,6 +20,7 @@
20
20
  .span4
21
21
  %h3 Component Driven Design
22
22
  %p Luca is a collection of common components needed to build large single page applications. Twitter's Bootstrap is responsible for all of the styling, and Backbone.js is responsible for everything else.
23
+ %p Luca encourages a style of application design centered around building isolated components, and using framework helpers to glue them together in a very readable, declarative style.
23
24
 
24
25
  .span4
25
26
  %h3 Interchangeable
@@ -1,2 +1,34 @@
1
- #viewport {
2
- }
1
+ #sample-component-wrapper {
2
+ border: 1px solid rgba(0,0,0,1);
3
+ box-shadow: 1px 1px 0px 0px rgba(0,0,0,0.5);
4
+ padding: 5px;
5
+ height: 420px;
6
+ h1 {
7
+ width: 100%;
8
+ text-align: center;
9
+ padding-top: 8px;
10
+ }
11
+
12
+ #sample-component {
13
+ height: 100%;
14
+ }
15
+
16
+ #form-vew, #collection-view, #toolbar {
17
+ margin: 4px 0px;
18
+ }
19
+ #form-view {
20
+ background-color: rgba(200,0,0,0.5);
21
+ border: 1px solid rgba(200,0,0,1);
22
+ height: 18%;
23
+ }
24
+ #collection-view {
25
+ background-color: rgba(0,200,0,0.5);
26
+ border: 1px solid rgba(0,200,0,1);
27
+ height: 50%;
28
+ }
29
+ #toolbar {
30
+ background-color: rgba(0,0,200,0.5);
31
+ border: 1px solid rgba(0,0,200,1);
32
+ height: 18%;
33
+ }
34
+ }
@@ -1,6 +1,6 @@
1
1
  module Luca
2
2
  module Rails
3
- VERSION = "0.9.0"
3
+ VERSION = "0.9.1"
4
4
  end
5
5
  end
6
6
 
@@ -1,46 +1,12 @@
1
1
  describe 'The Checkbox Array Field', ->
2
-
3
2
  beforeEach ->
4
- @model = new Backbone.Model(item_ids: ["1"])
5
- collection = new Luca.Collection
6
-
7
- @formView = new Luca.components.FormView
8
- components:[
9
- ctype: "checkbox_array"
10
- name: 'item_ids'
11
- collection: collection
12
- ]
3
+ @collection = new Luca.Collection([id:"1",name:"jon"])
4
+ @field = new Luca.fields.CheckboxArray(collection: @collection)
13
5
 
14
- @formView.render()
15
- @formView.loadModel(@model)
16
-
17
- collection.reset([
18
- id: "1", name: "Item1"
19
- ,
20
- id: "2", name: "Item2"
21
- ,
22
- id: "3", name: "Item3"
23
- ])
24
-
25
- @field = @formView.getFields()[0]
26
-
27
- it "should create a checkbox array field", ->
28
- expect(@formView.currentModel()).toEqual(@model)
29
- expect(@field.selectedItems).toEqual(["1"])
6
+ $('body').append("<div id='jasmine-helper' style='display:none' />")
30
7
 
31
- it "should render the list of checkboxes", ->
32
- expect(@field.$el.html()).toContain("Item1")
33
- expect(@field.$el.html()).toContain("Item2")
34
- expect(@field.$el.html()).toContain("Item3")
8
+ $('#jasmine-helper').html( @field.render().el )
35
9
 
36
- it "should check off each checkbox in the collection that is selected", ->
37
- expect(@field.$el.find("input[value='1']")[0].checked).toBeTruthy()
38
- expect(@field.$el.find("input[value='2']")[0].checked).toBeFalsy()
39
- expect(@field.$el.find("input[value='3']")[0].checked).toBeFalsy()
40
-
41
- it "should update the form model's attribute to be an array of selected items on click", ->
42
- checkbox = $(@field.$el.find("input[value='2']")[0])
43
- checkbox.prop("checked", true)
44
- checkbox.click()
10
+ it "should render checkboxes", ->
11
+ expect( @field.checkboxesRendered ).toEqual true
45
12
 
46
- expect(@field.getModel().get('item_ids')).toEqual(["1", "2"])
@@ -83,7 +83,7 @@ describe "Deferrable Rendering", ->
83
83
  @fetchSpy = sinon.spy()
84
84
  @customSpy = sinon.spy()
85
85
 
86
- @collection = new Luca.Collection
86
+ @collection = new Luca.Collection [],
87
87
  url: "/models"
88
88
  fetch: @fetchSpy
89
89
  custom: @customSpy
@@ -25,7 +25,7 @@ _.def("Luca.components.CollectionView").extends("Luca.components.Panel").with
25
25
  unless @collection?
26
26
  throw "Collection Views must specify a collection"
27
27
 
28
- unless @itemTemplate? || @itemRenderer?
28
+ unless @itemTemplate? || @itemRenderer? || @itemProperty?
29
29
  throw "Collection Views must specify an item template or item renderer function"
30
30
 
31
31
  Luca.components.Panel::initialize.apply(@, arguments)
@@ -38,7 +38,6 @@ _.def("Luca.components.CollectionView").extends("Luca.components.Panel").with
38
38
  attributesForItem: (item)->
39
39
  _.extend {}, class: @itemClassName, "data-index": item.index
40
40
 
41
- # expects an item object, which contains the
42
41
  contentForItem: (item={})->
43
42
  if @itemTemplate? and templateFn = Luca.template(@itemTemplate)
44
43
  content = templateFn.call(@, item)
@@ -46,7 +45,8 @@ _.def("Luca.components.CollectionView").extends("Luca.components.Panel").with
46
45
  if @itemRenderer? and _.isFunction( @itemRenderer )
47
46
  content = @itemRenderer.call(@, item)
48
47
 
49
- content || ""
48
+ if @itemProperty
49
+ content = if _.isFunction(@itemProperty) then @itemProperty() else (item.model.get(@itemProperty) || item.model[ @itemProperty ])
50
50
 
51
51
  makeItem: (model, index)->
52
52
  item = if @prepareItem? then @prepareItem.call(@, model, index) else (model:model, index: index)
@@ -54,7 +54,10 @@ _.def("Luca.components.CollectionView").extends("Luca.components.Panel").with
54
54
  make(@itemTagName, @attributesForItem(item), @contentForItem(item))
55
55
 
56
56
  getModels: ()->
57
- @collection.models
57
+ if @collection?.query and (@filter || @filterOptions)
58
+ @collection.query(@filter, @filterOptions)
59
+ else
60
+ @collection.models
58
61
 
59
62
  refresh: ()->
60
63
  panel = @
@@ -1,14 +1,19 @@
1
+ make = Luca.View::make
2
+
1
3
  _.def('Luca.fields.CheckboxArray').extends('Luca.core.Field').with
4
+ version: 2
2
5
 
3
6
  template: "fields/checkbox_array"
4
7
 
5
8
  events:
6
9
  "click input" : "clickHandler"
7
10
 
11
+ selectedItems: []
12
+
8
13
  initialize: (@options={})->
9
14
  _.extend @, @options
10
15
  _.extend @, Luca.modules.Deferrable
11
- _.bindAll @, "populateCheckboxes", "clickHandler", "_updateModel"
16
+ _.bindAll @, "renderCheckboxes", "clickHandler", "checkSelected"
12
17
 
13
18
  Luca.core.Field::initialize.apply @, arguments
14
19
 
@@ -17,7 +22,6 @@ _.def('Luca.fields.CheckboxArray').extends('Luca.core.Field').with
17
22
  @label ||= @name
18
23
  @valueField ||= "id"
19
24
  @displayField ||= "name"
20
- @selectedItems = []
21
25
 
22
26
  afterInitialize: (@options={})->
23
27
  try
@@ -25,41 +29,76 @@ _.def('Luca.fields.CheckboxArray').extends('Luca.core.Field').with
25
29
  catch e
26
30
  console.log "Error Configuring Collection", @, e.message
27
31
 
28
- @collection.bind "reset", @populateCheckboxes
32
+ cbArray = @
29
33
 
30
- afterRender: ()->
31
- if @collection?.length > 0
32
- @populateCheckboxes()
34
+ if @collection.length > 0
35
+ @renderCheckboxes()
33
36
  else
34
- @collection.trigger("reset")
37
+ @defer("renderCheckboxes").until(@collection,"reset")
35
38
 
36
39
  clickHandler: (event)->
37
- checkbox = event.target
38
- if checkbox.checked
39
- @selectedItems.push(checkbox.value)
40
+ checkbox = $(event.target)
41
+
42
+ if checkbox.prop('checked')
43
+ @selectedItems.push( checkbox.val() )
40
44
  else
41
- if @selectedItems.indexOf(checkbox.value) isnt -1
42
- @selectedItems = _.without(@selectedItems, [checkbox.value])
45
+ if _( @selectedItems ).include( checkbox.val() )
46
+ @selectedItems = _( @selectedItems ).without( checkbox.val() )
43
47
 
44
- @_updateModel()
48
+ controls: ()->
49
+ @$('.controls')
45
50
 
46
- populateCheckboxes: ()->
47
- controls = $(@el).find('.controls')
48
- controls.empty()
49
- unless _.isUndefined(@getModel())
50
- @selectedItems = @getModel().get(@name)
51
+ renderCheckboxes: ()->
52
+ @controls().empty()
53
+ @selectedItems = []
51
54
 
52
55
  @collection.each (model)=>
53
56
  value = model.get(@valueField)
54
57
  label = model.get(@displayField)
55
- input_id = _.uniqueId('field')
56
- controls.append(Luca.templates["fields/checkbox_array_item"]({label: label, value: value, input_id: input_id, input_name: @input_name}))
58
+ input_id = _.uniqueId("#{ @cid }_checkbox")
59
+
60
+ inputElement = make("input",type:"checkbox",name:@input_name,value:value,id: input_id)
61
+ element = make("label", {for:input_id}, inputElement)
62
+
63
+ $( element ).append(" #{ label }")
64
+ @controls().append( element )
65
+
66
+ @trigger("checkboxes:rendered", @checkboxesRendered = true)
67
+ @
68
+
69
+ uncheckAll: ()->
70
+ @allFields().prop('checked', false)
57
71
 
58
- @$("##{input_id}").attr("checked", "checked") unless _( @selectedItems ).indexOf(value) is -1
72
+ allFields: ()->
73
+ @controls().find("input[type='checkbox']")
74
+
75
+ checkSelected: (items)->
76
+ @selectedItems = items if items?
77
+
78
+ @uncheckAll()
79
+
80
+ for value in @selectedItems
81
+ checkbox = @controls().find("input[value='#{ value }']")
82
+ checkbox.prop('checked', true)
83
+
84
+ @selectedItems
85
+
86
+ getValue: ()->
87
+ @$(field).val() for field in @allFields() when @$(field).prop('checked')
88
+
89
+ setValue: (items)->
90
+ @selectedItems = items
91
+
92
+ if @checkboxesRendered is true
93
+ @checkSelected(items)
94
+ else
95
+ cbArray = @
96
+ @defer ()->
97
+ cbArray.checkSelected(items)
98
+ .until("checkboxes:rendered")
59
99
 
60
- $(@container).append(@$el)
100
+ getValues: ()->
101
+ @getValue()
61
102
 
62
- _updateModel: ()->
63
- attributes = {}
64
- attributes[@name] = @selectedItems
65
- @getModel().set(attributes)
103
+ setValues: (items)->
104
+ @setValue(items)
data/src/framework.coffee CHANGED
@@ -20,7 +20,7 @@
20
20
  return fallback()
21
21
 
22
22
  _.extend Luca,
23
- VERSION: "0.9.0"
23
+ VERSION: "0.9.1"
24
24
  core: {}
25
25
  containers: {}
26
26
  components: {}
@@ -1,5 +1,4 @@
1
- .form-horizontal
2
- .control-group
3
- %label{:for=>"<%= input_id %>"}
4
- <%= label %>
5
- .controls
1
+ .control-group
2
+ %label{:for=>"<%= input_id %>"}
3
+ <%= label %>
4
+ .controls
@@ -18,7 +18,7 @@
18
18
  };
19
19
 
20
20
  _.extend(Luca, {
21
- VERSION: "0.9.0",
21
+ VERSION: "0.9.1",
22
22
  core: {},
23
23
  containers: {},
24
24
  components: {},
@@ -1427,7 +1427,7 @@
1427
1427
  }).call(this);
1428
1428
  (function() {
1429
1429
  Luca.templates || (Luca.templates = {});
1430
- Luca.templates["fields/checkbox_array"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'form-horizontal\'>\n <div class=\'control-group\'>\n <label for=\'', input_id ,'\'>\n ', label ,'\n </label>\n <div class=\'controls\'></div>\n </div>\n</div>\n');}return __p.join('');};
1430
+ Luca.templates["fields/checkbox_array"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'control-group\'>\n <label for=\'', input_id ,'\'>\n ', label ,'\n </label>\n <div class=\'controls\'></div>\n</div>\n');}return __p.join('');};
1431
1431
  }).call(this);
1432
1432
  (function() {
1433
1433
  Luca.templates || (Luca.templates = {});
@@ -18,7 +18,7 @@
18
18
  };
19
19
 
20
20
  _.extend(Luca, {
21
- VERSION: "0.9.0",
21
+ VERSION: "0.9.1",
22
22
  core: {},
23
23
  containers: {},
24
24
  components: {},
@@ -1427,7 +1427,7 @@
1427
1427
  }).call(this);
1428
1428
  (function() {
1429
1429
  Luca.templates || (Luca.templates = {});
1430
- Luca.templates["fields/checkbox_array"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'form-horizontal\'>\n <div class=\'control-group\'>\n <label for=\'', input_id ,'\'>\n ', label ,'\n </label>\n <div class=\'controls\'></div>\n </div>\n</div>\n');}return __p.join('');};
1430
+ Luca.templates["fields/checkbox_array"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<div class=\'control-group\'>\n <label for=\'', input_id ,'\'>\n ', label ,'\n </label>\n <div class=\'controls\'></div>\n</div>\n');}return __p.join('');};
1431
1431
  }).call(this);
1432
1432
  (function() {
1433
1433
  Luca.templates || (Luca.templates = {});
@@ -2736,7 +2736,7 @@
2736
2736
  if (this.collection == null) {
2737
2737
  throw "Collection Views must specify a collection";
2738
2738
  }
2739
- if (!((this.itemTemplate != null) || (this.itemRenderer != null))) {
2739
+ if (!((this.itemTemplate != null) || (this.itemRenderer != null) || (this.itemProperty != null))) {
2740
2740
  throw "Collection Views must specify an item template or item renderer function";
2741
2741
  }
2742
2742
  Luca.components.Panel.prototype.initialize.apply(this, arguments);
@@ -2761,7 +2761,9 @@
2761
2761
  if ((this.itemRenderer != null) && _.isFunction(this.itemRenderer)) {
2762
2762
  content = this.itemRenderer.call(this, item);
2763
2763
  }
2764
- return content || "";
2764
+ if (this.itemProperty) {
2765
+ return content = _.isFunction(this.itemProperty) ? this.itemProperty() : item.model.get(this.itemProperty) || item.model[this.itemProperty];
2766
+ }
2765
2767
  },
2766
2768
  makeItem: function(model, index) {
2767
2769
  var item;
@@ -2772,7 +2774,12 @@
2772
2774
  return make(this.itemTagName, this.attributesForItem(item), this.contentForItem(item));
2773
2775
  },
2774
2776
  getModels: function() {
2775
- return this.collection.models;
2777
+ var _ref;
2778
+ if (((_ref = this.collection) != null ? _ref.query : void 0) && (this.filter || this.filterOptions)) {
2779
+ return this.collection.query(this.filter, this.filterOptions);
2780
+ } else {
2781
+ return this.collection.models;
2782
+ }
2776
2783
  },
2777
2784
  refresh: function() {
2778
2785
  var panel;
@@ -2882,84 +2889,127 @@
2882
2889
 
2883
2890
  }).call(this);
2884
2891
  (function() {
2892
+ var make;
2893
+
2894
+ make = Luca.View.prototype.make;
2885
2895
 
2886
2896
  _.def('Luca.fields.CheckboxArray')["extends"]('Luca.core.Field')["with"]({
2897
+ version: 2,
2887
2898
  template: "fields/checkbox_array",
2888
2899
  events: {
2889
2900
  "click input": "clickHandler"
2890
2901
  },
2902
+ selectedItems: [],
2891
2903
  initialize: function(options) {
2892
2904
  this.options = options != null ? options : {};
2893
2905
  _.extend(this, this.options);
2894
2906
  _.extend(this, Luca.modules.Deferrable);
2895
- _.bindAll(this, "populateCheckboxes", "clickHandler", "_updateModel");
2907
+ _.bindAll(this, "renderCheckboxes", "clickHandler", "checkSelected");
2896
2908
  Luca.core.Field.prototype.initialize.apply(this, arguments);
2897
2909
  this.input_id || (this.input_id = _.uniqueId('field'));
2898
2910
  this.input_name || (this.input_name = this.name);
2899
2911
  this.label || (this.label = this.name);
2900
2912
  this.valueField || (this.valueField = "id");
2901
- this.displayField || (this.displayField = "name");
2902
- return this.selectedItems = [];
2913
+ return this.displayField || (this.displayField = "name");
2903
2914
  },
2904
2915
  afterInitialize: function(options) {
2916
+ var cbArray;
2905
2917
  this.options = options != null ? options : {};
2906
2918
  try {
2907
2919
  this.configure_collection();
2908
2920
  } catch (e) {
2909
2921
  console.log("Error Configuring Collection", this, e.message);
2910
2922
  }
2911
- return this.collection.bind("reset", this.populateCheckboxes);
2912
- },
2913
- afterRender: function() {
2914
- var _ref;
2915
- if (((_ref = this.collection) != null ? _ref.length : void 0) > 0) {
2916
- return this.populateCheckboxes();
2923
+ cbArray = this;
2924
+ if (this.collection.length > 0) {
2925
+ return this.renderCheckboxes();
2917
2926
  } else {
2918
- return this.collection.trigger("reset");
2927
+ return this.defer("renderCheckboxes").until(this.collection, "reset");
2919
2928
  }
2920
2929
  },
2921
2930
  clickHandler: function(event) {
2922
2931
  var checkbox;
2923
- checkbox = event.target;
2924
- if (checkbox.checked) {
2925
- this.selectedItems.push(checkbox.value);
2932
+ checkbox = $(event.target);
2933
+ if (checkbox.prop('checked')) {
2934
+ return this.selectedItems.push(checkbox.val());
2926
2935
  } else {
2927
- if (this.selectedItems.indexOf(checkbox.value) !== -1) {
2928
- this.selectedItems = _.without(this.selectedItems, [checkbox.value]);
2936
+ if (_(this.selectedItems).include(checkbox.val())) {
2937
+ return this.selectedItems = _(this.selectedItems).without(checkbox.val());
2929
2938
  }
2930
2939
  }
2931
- return this._updateModel();
2932
2940
  },
2933
- populateCheckboxes: function() {
2934
- var controls,
2935
- _this = this;
2936
- controls = $(this.el).find('.controls');
2937
- controls.empty();
2938
- if (!_.isUndefined(this.getModel())) {
2939
- this.selectedItems = this.getModel().get(this.name);
2940
- }
2941
+ controls: function() {
2942
+ return this.$('.controls');
2943
+ },
2944
+ renderCheckboxes: function() {
2945
+ var _this = this;
2946
+ this.controls().empty();
2947
+ this.selectedItems = [];
2941
2948
  this.collection.each(function(model) {
2942
- var input_id, label, value;
2949
+ var element, inputElement, input_id, label, value;
2943
2950
  value = model.get(_this.valueField);
2944
2951
  label = model.get(_this.displayField);
2945
- input_id = _.uniqueId('field');
2946
- controls.append(Luca.templates["fields/checkbox_array_item"]({
2947
- label: label,
2952
+ input_id = _.uniqueId("" + _this.cid + "_checkbox");
2953
+ inputElement = make("input", {
2954
+ type: "checkbox",
2955
+ name: _this.input_name,
2948
2956
  value: value,
2949
- input_id: input_id,
2950
- input_name: _this.input_name
2951
- }));
2952
- if (_(_this.selectedItems).indexOf(value) !== -1) {
2953
- return _this.$("#" + input_id).attr("checked", "checked");
2954
- }
2957
+ id: input_id
2958
+ });
2959
+ element = make("label", {
2960
+ "for": input_id
2961
+ }, inputElement);
2962
+ $(element).append(" " + label);
2963
+ return _this.controls().append(element);
2955
2964
  });
2956
- return $(this.container).append(this.$el);
2965
+ this.trigger("checkboxes:rendered", this.checkboxesRendered = true);
2966
+ return this;
2967
+ },
2968
+ uncheckAll: function() {
2969
+ return this.allFields().prop('checked', false);
2957
2970
  },
2958
- _updateModel: function() {
2959
- var attributes;
2960
- attributes = {};
2961
- attributes[this.name] = this.selectedItems;
2962
- return this.getModel().set(attributes);
2971
+ allFields: function() {
2972
+ return this.controls().find("input[type='checkbox']");
2973
+ },
2974
+ checkSelected: function(items) {
2975
+ var checkbox, value, _i, _len, _ref;
2976
+ if (items != null) this.selectedItems = items;
2977
+ this.uncheckAll();
2978
+ _ref = this.selectedItems;
2979
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
2980
+ value = _ref[_i];
2981
+ checkbox = this.controls().find("input[value='" + value + "']");
2982
+ checkbox.prop('checked', true);
2983
+ }
2984
+ return this.selectedItems;
2985
+ },
2986
+ getValue: function() {
2987
+ var field, _i, _len, _ref, _results;
2988
+ _ref = this.allFields();
2989
+ _results = [];
2990
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
2991
+ field = _ref[_i];
2992
+ if (this.$(field).prop('checked')) _results.push(this.$(field).val());
2993
+ }
2994
+ return _results;
2995
+ },
2996
+ setValue: function(items) {
2997
+ var cbArray;
2998
+ this.selectedItems = items;
2999
+ if (this.checkboxesRendered === true) {
3000
+ return this.checkSelected(items);
3001
+ } else {
3002
+ cbArray = this;
3003
+ return this.defer(function() {
3004
+ return cbArray.checkSelected(items);
3005
+ }).until("checkboxes:rendered");
3006
+ }
3007
+ },
3008
+ getValues: function() {
3009
+ return this.getValue();
3010
+ },
3011
+ setValues: function(items) {
3012
+ return this.setValue(items);
2963
3013
  }
2964
3014
  });
2965
3015
 
@@ -4082,56 +4132,20 @@
4082
4132
 
4083
4133
  describe('The Checkbox Array Field', function() {
4084
4134
  beforeEach(function() {
4085
- var collection;
4086
- this.model = new Backbone.Model({
4087
- item_ids: ["1"]
4088
- });
4089
- collection = new Luca.Collection;
4090
- this.formView = new Luca.components.FormView({
4091
- components: [
4092
- {
4093
- ctype: "checkbox_array",
4094
- name: 'item_ids',
4095
- collection: collection
4096
- }
4097
- ]
4098
- });
4099
- this.formView.render();
4100
- this.formView.loadModel(this.model);
4101
- collection.reset([
4135
+ this.collection = new Luca.Collection([
4102
4136
  {
4103
4137
  id: "1",
4104
- name: "Item1"
4105
- }, {
4106
- id: "2",
4107
- name: "Item2"
4108
- }, {
4109
- id: "3",
4110
- name: "Item3"
4138
+ name: "jon"
4111
4139
  }
4112
4140
  ]);
4113
- return this.field = this.formView.getFields()[0];
4114
- });
4115
- it("should create a checkbox array field", function() {
4116
- expect(this.formView.currentModel()).toEqual(this.model);
4117
- return expect(this.field.selectedItems).toEqual(["1"]);
4118
- });
4119
- it("should render the list of checkboxes", function() {
4120
- expect(this.field.$el.html()).toContain("Item1");
4121
- expect(this.field.$el.html()).toContain("Item2");
4122
- return expect(this.field.$el.html()).toContain("Item3");
4123
- });
4124
- it("should check off each checkbox in the collection that is selected", function() {
4125
- expect(this.field.$el.find("input[value='1']")[0].checked).toBeTruthy();
4126
- expect(this.field.$el.find("input[value='2']")[0].checked).toBeFalsy();
4127
- return expect(this.field.$el.find("input[value='3']")[0].checked).toBeFalsy();
4141
+ this.field = new Luca.fields.CheckboxArray({
4142
+ collection: this.collection
4143
+ });
4144
+ $('body').append("<div id='jasmine-helper' style='display:none' />");
4145
+ return $('#jasmine-helper').html(this.field.render().el);
4128
4146
  });
4129
- return it("should update the form model's attribute to be an array of selected items on click", function() {
4130
- var checkbox;
4131
- checkbox = $(this.field.$el.find("input[value='2']")[0]);
4132
- checkbox.prop("checked", true);
4133
- checkbox.click();
4134
- return expect(this.field.getModel().get('item_ids')).toEqual(["1", "2"]);
4147
+ return it("should render checkboxes", function() {
4148
+ return expect(this.field.checkboxesRendered).toEqual(true);
4135
4149
  });
4136
4150
  });
4137
4151
 
@@ -5022,7 +5036,7 @@
5022
5036
  beforeEach(function() {
5023
5037
  this.fetchSpy = sinon.spy();
5024
5038
  this.customSpy = sinon.spy();
5025
- this.collection = new Luca.Collection({
5039
+ this.collection = new Luca.Collection([], {
5026
5040
  url: "/models",
5027
5041
  fetch: this.fetchSpy,
5028
5042
  custom: this.customSpy,