Skip to content

Commit deed50d

Browse files
committed
提交完整的测试示例
1 parent edbf261 commit deed50d

54 files changed

Lines changed: 1063 additions & 71 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

tests/dummy/app/adapters/application.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import WildemberAdapter from 'wild-ember/adapters/wildember';
33

44
export default WildemberAdapter.extend({
55
wilddogConfig: {
6-
syncDomain: "ddlisting.wilddog.com",
7-
syncURL: "https://ddlisting.wilddogio.com" //输入节点 URL
6+
syncDomain: "wildember.wilddog.com",
7+
syncURL: "https://wildember.wilddogio.com" //输入节点 URL
88
}
99
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// app/components/fader-label.js
2+
import Ember from 'ember';
3+
4+
export default Ember.Component.extend({
5+
tagName: 'span',
6+
7+
classNames: ['label label-success label-fade'],
8+
classNameBindings: ['isShowing:label-show'],
9+
10+
isShowing: false,
11+
12+
isShowingChanged: Ember.observer('isShowing', function() {
13+
Ember.run.later(() => {
14+
this.set('isShowing', false);
15+
}, 3000);
16+
})
17+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// app/components/library-item-form.js
2+
3+
import Ember from 'ember';
4+
5+
export default Ember.Component.extend({
6+
buttonLabel: 'Save',
7+
8+
actions: {
9+
buttonClicked(param) {
10+
this.sendAction('action', param);
11+
}
12+
}
13+
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import Ember from 'ember';
2+
3+
export default Ember.Component.extend({
4+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// app/components/nav-link-to.js
2+
import Ember from 'ember';
3+
4+
export default Ember.LinkComponent.extend({
5+
tagName: 'li'
6+
});
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// app/components/number-box.js
2+
import Ember from 'ember';
3+
4+
export default Ember.Component.extend({
5+
6+
classNames: ['panel', 'panel-warning']
7+
8+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// app/components/seeder-block.js
2+
import Ember from 'ember';
3+
4+
export default Ember.Component.extend({
5+
6+
actions: {
7+
generateAction() {
8+
this.sendAction('generateAction');
9+
},
10+
11+
deleteAction() {
12+
this.sendAction('deleteAction');
13+
}
14+
}
15+
});
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// app/controllers/admin/seeder.js
2+
import Ember from 'ember';
3+
import Faker from 'faker';
4+
5+
export default Ember.Controller.extend({
6+
7+
libraries: [],
8+
books: [],
9+
authors: [],
10+
11+
actions: {
12+
13+
generateLibraries() {
14+
const counter = parseInt(this.get('librariesCounter'));
15+
16+
for (let i = 0; i < counter; i++) {
17+
this.store.createRecord('library').randomize().save().then(() => {
18+
if (i === counter-1) {
19+
this.set('librariesCounter', 0);
20+
this.set('libDone', true);
21+
}
22+
});
23+
}
24+
},
25+
26+
deleteLibraries() {
27+
this._destroyAll(this.get('libraries'));
28+
29+
this.set('libDelDone', true);
30+
},
31+
32+
generateBooksAndAuthors() {
33+
const counter = parseInt(this.get('authorCounter'));
34+
35+
for (let i = 0; i < counter; i++) {
36+
let newAuthor = this.store.createRecord('author');
37+
newAuthor.randomize()
38+
.save().then(() => {
39+
if (i === counter-1) {
40+
this.set('authorCounter', 0);
41+
this.set('authDone', true);
42+
}
43+
}
44+
);
45+
46+
this._generateSomeBooks(newAuthor);
47+
}
48+
},
49+
50+
deleteBooksAndAuthors() {
51+
this._destroyAll(this.get('books'));
52+
this._destroyAll(this.get('authors'));
53+
54+
this.set('authDelDone', true);
55+
}
56+
},
57+
58+
// Private methods
59+
60+
_generateSomeBooks(author) {
61+
const bookCounter = Faker.random.number(10);
62+
63+
for (let j = 0; j < bookCounter; j++) {
64+
const library = this._selectRandomLibrary();
65+
this.store.createRecord('book')
66+
.randomize(author, library)
67+
.save();
68+
author.save();
69+
library.save();
70+
}
71+
},
72+
73+
_selectRandomLibrary() {
74+
const libraries = this.get('libraries');
75+
const librariesCounter = libraries.get('length');
76+
77+
// Create a new array from IDs
78+
const libraryIds = libraries.map((lib) => {return lib.get('id');});
79+
const randomNumber = Faker.random.number(librariesCounter-1);
80+
81+
const randomLibrary = libraries.findBy('id', libraryIds[randomNumber]);
82+
return randomLibrary;
83+
},
84+
85+
_destroyAll(records) {
86+
records.forEach((item) => {
87+
item.destroyRecord();
88+
});
89+
}
90+
91+
});
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import Ember from 'ember';
2+
3+
export default Ember.Controller.extend({
4+
5+
// emailAddress: '', // 设置默认值为空字符串
6+
// message: '', // 信息内容
7+
//
8+
// // 判断信息长度是否大于5
9+
// msgLen: Ember.computed.gte('message.length', 5),
10+
//
11+
// // 使用正则表达式判断邮箱格式,如果正确则返回true反之返回false
12+
// isValid: Ember.computed.match('emailAddress', /^.+@.+\..+$/),
13+
// // 判断长度和邮件格式同时符合
14+
// disabled: Ember.computed.and('msgLen', 'isValid'),
15+
// //当`disabled=false`时按钮可用,所以正好需要取反
16+
// isDisabled: Ember.computed.not('disabled'), //当`disabled=false`时按钮可用,所以正好需要取反
17+
//
18+
// // 不适用Ember封装的方法,手动写判断
19+
// isDisabled2: Ember.computed('message', 'emailAddress', function() {
20+
// var msg = this.get('message');
21+
// var email = this.get('emailAddress');
22+
// var re = /^.+@.+\..+$/;
23+
// //当`disabled=false`时按钮可用,所以正好需要取反
24+
// return !(msg.length >= 5 && re.test(email));
25+
// }),
26+
27+
actions: {
28+
saveContact: function(contact) {
29+
// 注意alert中字符串两边使用的是 ` 不是单引号或者双引号
30+
// alert(`Saving of the following email address is in propgress: ${this.get('emailAddress')}`);
31+
// 模拟保存操作
32+
// this.set('responseMessage', `Thank you! We've just saved your email address: ${this.get('emailAddress')}message is ${this.get('message')}`);
33+
// // 清空输入内容
34+
// this.set('emailAddress', '');
35+
// this.set('message', '');
36+
37+
// 保存数据到firebase
38+
if (contact) {
39+
contact.save().then((responseMessage) => {
40+
this.set('model.responseMessage', `Thank you! We've just saved your email address: <b>${responseMessage.get('email')}</b> message is <b>${responseMessage.get('message')}</b>`);
41+
// 清空输入内容
42+
this.set('model.email', '');
43+
this.set('model.message', '');
44+
});
45+
}
46+
}
47+
}
48+
49+
});
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// app/controller/index.js
2+
3+
import Ember from 'ember';
4+
5+
export default Ember.Controller.extend({
6+
7+
headerMessage: 'Coming Soon',
8+
9+
responseMessage: '', // 设置默认值为空字符串
10+
11+
emailAddress: '', // 设置默认值为空字符串
12+
// 使用正则表达式判断邮箱格式,如果正确则返回true反之返回false
13+
isValid: Ember.computed.match('emailAddress', /^.+@.+\..+$/),
14+
// 把计算属性isValid绑定到isDisabled上
15+
isDisabled: Ember.computed.not('isValid'), //当`disabled=false`时按钮可用,所以正好需要取反
16+
17+
actions: {
18+
saveInvitation: function() {
19+
const email = this.get('emailAddress');
20+
// 创建一个模型对象
21+
const newInvitaction = this.store.createRecord('invitation', { email: email });
22+
23+
//保存模型对象到store中
24+
newInvitaction.save().then((response) => {
25+
this.set('responseMessage', `感谢你邀请: ${response.get('email')}加入到Library!`);
26+
// 情况输入框内容
27+
this.set('emailAddress', '');
28+
}, (reason) => {
29+
this.set('responseMessage', `保存: ${this.get('emailAddress')} 失败。`);
30+
// 情况输入框内容
31+
this.set('emailAddress', '');
32+
});
33+
}
34+
}
35+
36+
});

0 commit comments

Comments
 (0)