试图为我的应用找出关于 MVC 的“ember 最佳实践”。也供参考,我正在使用 ember-data、ember-layout 和 ember-route-manager。
我将以用户为例:
我想做的是从数据库中获取用户模型...然后将其包装在 UserController 中,并将模型设置为“内容”属性...然后在视图中,我想绑定到某些功能的控制器,以及模型级数据的控制器内容。所以控制器可能看起来像:
App.UserViewController = Em.Object.create({
content: userRecord,
isFollowingBinding : 'content.you_follow',
toggleFollow: function() {
make server call to change following flag
}
});
然后视图可以绑定到{{controller.content.name}}或{{#if controller.isFollowing}}或{{action "toggleFollowing" target="controller"}}
但是假设我从数据库中获取了用户模型的列表...我觉得应该发生的是每个模型都应该用控制器包装,并且应该作为列表返回...所以视图会有一个用户控制器列表
顺便说一句,我已经这样做了......而且它工作得很好......除了每次我重新加载列表时,我都会用新的控制器包装所有新模型对象......随着时间的推移,控制器的数量内存越来越大。在我的基本 Controller 类上,我正在记录对“destroy”的调用,但我没有看到它发生过
当谈到 Em.View... 我知道每次从屏幕上删除它时, .destroy() 都会收到调用(我也在记录这些调用)。所以如果我要将我的代码移动到一个视图中,我知道它每次都会被破坏并重新创建......但我不觉得像 toggleFollow() 这样的功能应该在视图中......
所以问题:
- 这是MVC应该如何工作的吗?包装在该模型的控制器中的模型的每个实例?哪里可以为一个屏幕创建很多控制器实例?
- 如果我采用这种方法,那么我负责销毁()我创建的所有控制器吗?
- 或者我上面描述的功能是否真的适用于视图,并且当它们从屏幕上添加/删除时,Ember 会创建/销毁它们?还允许模板设计者决定他们需要什么功能(如果他们只需要{{user.name}},则无需实例化其他控制器/视图类......但如果他们需要“切换”按钮,那么他们可以将模板的那部分包装在{{#view App.UserViewController contentBinding="this"}}中)
我重新写了几次......希望它有意义......