我正在尝试遵循最佳实践Ember及其潜力,我想到了这个问题,Mixins和Services之间的区别是什么以及你如何使用它们?
我有一些服务/ mixins并且工作得很好,但我想确保我做得对.
loc*_*cks 15
一混入是当你想不同的对象具有相同的行为/数据.假设您希望多个控制器触发相同的操作,但更改一个参数:
// app/mixins/change-name.js
export default Ember.Mixin.create({
actions: {
changeName(item) {
item.set('name', this.get('name'));
}
}
});
// app/controllers/some-controller
import ChangeName from '<app-name>/mixins/change-name';
export default Ember.Controller.extend(ChangeName, {
name: 'Some Controller'
});
Run Code Online (Sandbox Code Playgroud)
请注意,控制器将具有相同的操作,但它不是共享的,每个都有自己的操作.您也可以从对象本身扩展mixins,因为它们已添加到_super()链中.
需要记住的是,像数组这样的原始引用数据类型仍然通过引用传递.因此,如果您有一个具有数组属性的Mixin,请确保Ember.computed在每次使用Mixin时在数组上使用以创建新实例.否则简单地使用泛型[]将导致所有Mixin使用指向同一个数组.不同的参考值,都指向同一个东西.
服务可以被视为一种可变的共享数据.如果您有一组需要从应用程序的不同部分访问的数据或行为,则它是服务的良好候选者.
例如,一个这样的例子是购物篮.无论您在申请中的哪个位置,您都需要参考同一个购物篮来操纵其数据.
| 归档时间: |
|
| 查看次数: |
4290 次 |
| 最近记录: |