我使用Ember 2.0和ember-data 2.0。創建未連接到商店的Ember模型的實例
在Rails中這是很常見的模型使用的模型實際實例的形式和組成部分。對於posts/new
表單,您可以傳遞Post.new
並將其用於form.html.erb
模板中。
在灰燼這是困難,因爲調用new Post
造成破壞的模型。相反,我們鼓勵您使用商店,並使用this.store.createRecord('post');
。
這很好,但不是在構建隔離組件時。例如,用戶可以添加多個模型的表單,例如類別創建者。在我腦海中的結構會是這樣如下:
category-form/template.hbs
<button {{action 'addCategory'}}>Add category</button>
{{#each categories as |category|}}
{{input value=category.name}}
{{/each}}
<button {{action 'save'}}>Save</button>
然後component.js會是這樣的:
category-form/component.js
import Ember from 'ember';
import Category from 'app/category/model';
export default Ember.Component.extend({
categories: [],
actions: {
addCategory() {
// THIS DOES NOT WORK
this.get("categories").pushObject(new Category);
},
save() {
this.sendAction("saveCategories", this.get("categories"));
}
}
});
上面的例子不工作,但將需要this.store.createRecord
。但據我所知,該組件無法訪問該商店。這是理智的,因爲那會成爲與全球化國家混雜的組成部分。同樣,當使用createRecord
時,如果用戶在不保存模型的情況下導航,最終會在商店中產生大量剩餘模型。
我想在這個例子中,category-form
成分是從全局狀態的其餘部分完全隔離。
我的問題是,怎麼會變成這樣使用燼邏輯正確處理?
這聽起來很符合邏輯,但我想知道後一種方法,例如我會有一個相當複雜的模型(讓我們想象一下Category模型有很多關係),然後我創建一個'category-form'將所有操作都吹到了路由或控制器上,我基本上會重複編輯路由和創建路由中的邏輯。 – ErikPerik
...你會如何處理這個問題?例如創建一個臨時DTO? – ErikPerik
我不認爲你會重複任何邏輯。在你的組件中,即使你有兩個動作,他們都會把它們發送出去。所有的邏輯將在一個地方 - 路線或控制器。如果兩個路由或控制器共享相同的邏輯,那麼它是使用Ember.Mixin並將該邏輯提取到混合的理想場所。什麼是臨時DTO? –