集合
集合代表模型的陣列。它們由 hasMany 關聯或 ModelClass 查詢方法之一返回
let posts = user.blogPosts;
let posts = schema.blogPosts.all();
let posts = schema.blogPosts.find([1, 2, 4]);
let posts = schema.blogPosts.where({ published: true });
請注意,還有一個 PolymorphicCollection
類別,它與 Collection
相同,只是它可以包含模型的異質陣列。因此,它沒有 modelName
屬性。這讓序列化器和系統的其他部分可以用不同的方式與之互動。
屬性
length: 整數
集合中模型的數量。
user.posts.length; // 2
modelName: 字串
此集合所代表的虛線模型名稱。
let posts = user.blogPosts;
posts.modelName; // "blog-post"
模型名稱與實際模型分開,因為集合可以是空的。
models: 陣列
此集合中模型的基本 JavaScript 陣列。
posts.models // [ post:1, post:2, ... ]
雖然集合有許多類似陣列的方法,例如 filter
和 sort
,但如果您想使用 map
之類的方法,或使用 []
存取器,則使用基本陣列可能很有用。
例如,在測試中,您可能想要斷言集合中的模型
let newPost = user.posts.models[0].title;
assert.equal(newPost, "My first post");
方法
add(model: 模型): 任意
將模型新增到此集合。
posts.length; // 1
posts.add(newPost);
posts.length; // 2
destroy(): 任意
銷毀集合中所有模型的資料庫記錄。
let posts = user.blogPosts;
posts.destroy(); // all posts removed from db
filter(f: 函數): 集合
根據提供的 回呼函數,返回一個新的集合,其中模型的篩選結果已更新。
let publishedPosts = user.posts.filter(post => post.isPublished);
includes(): 布林值
檢查集合是否包含給定的模型。
posts.includes(newPost);
透過檢查給定的模型名稱和 ID 是否存在於集合中來運作,使其比嚴格的物件相等性更具彈性。
let post = server.create('post');
let programming = server.create('tag', { text: 'Programming' });
visit(`/posts/${post.id}`);
click('.tag-selector');
click('.tag:contains(Programming)');
post.reload();
assert.ok(post.tags.includes(programming));
mergeCollection(collection: 集合): 任意
透過合併另一個集合中的模型來修改集合。
user.posts.mergeCollection(newPosts);
user.posts.save();
reload(): 任意
重新載入集合中的每個模型。
let posts = author.blogPosts;
// ...
posts.reload(); // reloads data for each post from the db
remove(model: 模型): 任意
從此集合中移除模型。
posts.length; // 5
let firstPost = posts.models[0];
posts.remove(firstPost);
posts.save();
posts.length; // 4
save(): 任意
儲存集合中的所有模型。
let posts = user.blogPosts;
posts.models[0].published = true;
posts.save(); // all posts saved to db
slice(begin: 整數, end: 整數): 集合
返回一個新的集合,其中模型的子集是從 begin
到 end
選取的。
let firstThreePosts = user.posts.slice(0, 3);
sort(f: 函數): 集合
根據提供的 比較函數,返回一個新的集合,其中模型的排序結果已更新。
let postsByTitleAsc = user.posts.sort((a, b) => {
return b.title < a.title;
});
toString(): 字串
集合和 ID 的簡單字串表示法。
user.posts.toString(); // collection:post(post:1,post:4)
update(key: 任意, val: 任意): 任意
更新集合中的每個模型,並立即將所有變更持久保存到資料庫。
let posts = user.blogPosts;
posts.update('published', true); // the db was updated for all posts