我将 Ember 2.0 与 ember-data 2.0 一起使用。
在 Rails 中,使用模型的真实实例对表单和组件进行建模是很常见的。对于posts/new
表单,您将传入 aPost.new
并在form.html.erb
模板中使用它。
在 Ember 中,这很困难,因为调用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
此示例中的组件与全局状态的其余部分完全隔离。
我的问题是,如何使用 ember 逻辑正确处理这个问题?