Ember.js 什么';s Emberjs上的mixin和服务之间的区别
我试图遵循最佳实践Ember及其潜力,我想到了这个问题mixin和Services之间的区别是什么,以及您是如何使用它们的Ember.js 什么';s Emberjs上的mixin和服务之间的区别,ember.js,Ember.js,我试图遵循最佳实践Ember及其潜力,我想到了这个问题mixin和Services之间的区别是什么,以及您是如何使用它们的 我有一些服务/混音,工作得很好,但我想确定我做得对 Amixin是指希望不同对象具有相同的行为/数据。假设您希望多个控制器触发相同的操作,但更改一个参数: // app/mixins/change-name.js export default Ember.Mixin.create({ actions: { changeName(item) { ite
我有一些服务/混音,工作得很好,但我想确定我做得对 Amixin是指希望不同对象具有相同的行为/数据。假设您希望多个控制器触发相同的操作,但更改一个参数:
// 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'
});
//app/mixins/change-name.js
导出默认的Ember.Mixin.create({
行动:{
更改名称(项目){
item.set('name',this.get('name');
}
}
});
//应用程序/控制器/某些控制器
从“/mixins/change name”导入ChangeName;
导出默认的Ember.Controller.extend(ChangeName{
名称:“某个控制器”
});
请注意,控制器将具有相同的操作,但它不是共享的,每个控制器都有自己的操作。您还可以从对象本身扩展混合,因为它们被添加到
\u super()
链中
要记住的一个问题是,像数组这样的原始按引用数据类型仍然是按引用传递的。因此,如果您有一个具有array属性的Mixin,请确保在每次使用Mixin时在数组上使用Ember.computed
,以创建新实例。否则,仅使用泛型[]
将导致所有Mixin使用指向同一数组。不同的参考值,都指向同一事物
服务可以看作是一种可变的共享数据。如果您有一组数据或行为需要从应用程序的不同部分访问,那么它是一个很好的服务候选者
例如,购物篮就是这样一个例子。无论您在应用程序中的哪个位置,您都需要参考同一个购物篮来处理其数据。如果您添加您认为它们是什么以及为什么您认为它们是可互换的,这会有所帮助,您是否尝试阅读文档?如果是的话,你能指出文件中令人困惑的地方吗?第一种观点是,它们非常相似,但我想听听每个文件的概念。可能是我正在做的“工作”,但根本不对。主要是,我使用服务/混合来共享
控制器/路由/组件之间的共同行为。这意味着服务在应用程序中是同一实例,而它是活动的?是的!服务是单例对象。“但它不是共享的,每个都有自己的”。。。我知道你现在不是在谈论对象文字,但我认为应该在你的回答中提到。它显示了与mixin共享或不共享数据有关的实现细节。