7
7
< title > Knockout.js demo</ title >
8
8
9
9
< link rel ="stylesheet " href ="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css ">
10
- < link rel ="stylesheet " href ="//cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.2.2/gridstack.min.js "/>
11
-
12
10
< link rel ="stylesheet " href ="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css "/>
13
- < link rel ="stylesheet " href ="//cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.2.1/gridstack.min.css "/>
14
-
15
- <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
16
- <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
17
- <!--[if lt IE 9]>
18
- <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
19
- <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
20
- <![endif]-->
11
+ < link rel ="stylesheet " href ="../gridstack.css "/>
21
12
22
13
< script src ="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js "> </ script >
23
14
< script src ="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.0/jquery-ui.js "> </ script >
24
- < script src ="//code.jquery.com/jquery-migrate-1.2.1.min.js "> </ script >
25
15
< script src ="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js "> </ script >
26
16
< script src ="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js "> </ script >
27
17
< script src ="//cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js "> </ script >
28
- < script src ="//cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js "> </ script >
29
- < script src ="//cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.2.2/gridstack.min.js "> </ script >
18
+ < script src ="../gridstack.js "> </ script >
30
19
31
20
< style type ="text/css ">
32
21
.grid-stack {
44
33
< div class ="container-fluid ">
45
34
< h1 > knockout.js Demo</ h1 >
46
35
36
+ < div >
37
+ < button data-bind ="click: add_new_widget "> Add new widget</ button >
38
+ </ div >
39
+
40
+ < br >
41
+
47
42
< div data-bind ="component: {name: 'dashboard-grid', params: $data} "> </ div >
48
43
</ div >
49
44
@@ -58,22 +53,17 @@ <h1>knockout.js Demo</h1>
58
53
this . widgets = controller . widgets ;
59
54
60
55
this . afterAddWidget = function ( items ) {
61
- _ . each ( items , function ( item ) {
62
- item = $ ( item ) ;
63
- if ( item . data ( '_gridstack_node' ) || item [ 0 ] . nodeType != 1 )
64
- return ;
65
-
66
- if ( grid == null ) {
67
- grid = $ ( componentInfo . element ) . find ( '.grid-stack' ) . gridstack ( {
68
- auto : false
69
- } ) . data ( 'gridstack' ) ;
70
- }
71
-
72
- grid . add_widget ( item ) ;
73
- ko . utils . domNodeDisposal . addDisposeCallback ( item [ 0 ] , function ( ) {
74
- grid . remove_widget ( item ) ;
75
- } ) ;
76
- } , this ) ;
56
+ if ( grid == null ) {
57
+ grid = $ ( componentInfo . element ) . find ( '.grid-stack' ) . gridstack ( {
58
+ auto : false
59
+ } ) . data ( 'gridstack' ) ;
60
+ }
61
+
62
+ var item = _ . find ( items , function ( i ) { return i . nodeType == 1 } ) ;
63
+ grid . add_widget ( item ) ;
64
+ ko . utils . domNodeDisposal . addDisposeCallback ( item , function ( ) {
65
+ grid . remove_widget ( item ) ;
66
+ } ) ;
77
67
} ;
78
68
} ;
79
69
@@ -83,16 +73,32 @@ <h1>knockout.js Demo</h1>
83
73
template :
84
74
[
85
75
'<div class="grid-stack" data-bind="foreach: {data: widgets, afterRender: afterAddWidget}">' ,
86
- ' <div class="grid-stack-item" data-bind="attr: {\'data-gs-x\': $data.x, \'data-gs-y\': $data.y, \'data-gs-width\': $data.width, \'data-gs-height\': $data.height}">' ,
87
- ' <div class="grid-stack-item-content" data-bind="text : $index" ></div>' ,
76
+ ' <div class="grid-stack-item" data-bind="attr: {\'data-gs-x\': $data.x, \'data-gs-y\': $data.y, \'data-gs-width\': $data.width, \'data-gs-height\': $data.height, \'data-gs-auto-position\': $data.auto_position }">' ,
77
+ ' <div class="grid-stack-item-content"><button data-bind="click : $root.delete_widget">Delete me</button ></div>' ,
88
78
' </div>' ,
89
- '</div>'
90
- ] . join ( '\n ' )
79
+ '</div> '
80
+ ] . join ( '' )
91
81
} ) ;
92
82
93
83
$ ( function ( ) {
94
84
var Controller = function ( widgets ) {
85
+ var self = this ;
86
+
95
87
this . widgets = ko . observableArray ( widgets ) ;
88
+
89
+ this . add_new_widget = function ( ) {
90
+ this . widgets . push ( {
91
+ x : 0 ,
92
+ y : 0 ,
93
+ width : Math . floor ( 1 + 3 * Math . random ( ) ) ,
94
+ height : Math . floor ( 1 + 3 * Math . random ( ) ) ,
95
+ auto_position : true
96
+ } ) ;
97
+ } ;
98
+
99
+ this . delete_widget = function ( item ) {
100
+ self . widgets . remove ( item ) ;
101
+ } ;
96
102
} ;
97
103
98
104
var widgets = [
@@ -102,7 +108,8 @@ <h1>knockout.js Demo</h1>
102
108
{ x : 1 , y : 2 , width : 4 , height : 2 }
103
109
] ;
104
110
105
- ko . applyBindings ( new Controller ( widgets ) ) ;
111
+ var controller = new Controller ( widgets ) ;
112
+ ko . applyBindings ( controller ) ;
106
113
} ) ;
107
114
</ script >
108
115
</ body >
0 commit comments