1
我正在编写一个Ember.js
应用程序来显示从CRUD RESTful API中提取的嵌套注释列表。在这种情况下使用Ember.js控制器的正确方法是什么?
过了半路,我意识到我可能会误用Ember.js
而不是利用它的范例。
例如,我Comment
物体看起来是这样的:
App.Comment = Em.Object.extend({
id: null,
author: null,
text: null,
delete: function() { /* AJAX call to API here */ }
});
是否佯装哈delete()
功能作为模型对象的一部分,而不是一个控制器?
我的另一个疑问是我处理状态。在我的模板我做这样的事情:
{{#if view.comment.editing}}
{{view Ember.TextArea valueBinding="view.comment.text"}}
<a href="#" {{action cancelEditingComment}}>Cancel</a>
{{else}}
<p>{{view.comment.text}}</p>
<a href="#" {{action editComment}}>Edit</a>
{{/if}}
在我的路由器
然后,editComment
和cancelEditingComment
行动将委托给Comment
,它具有功能:
startEditing: function() { this.set('editing', true); }
cancelEditing: function() { this.set('editing', false); }
我不禁想,我做错了什么,虽然这种代码似乎工作。
对于如何重组我的代码,以及任何可能帮助我的建议阅读,您有什么建议吗?
谢谢,这听起来不错。我试图从'Comment'将'isEditing'逻辑移动到我的视图中,但编辑逻辑位于我的控制器中(我认为它应该)。当我在控制器中时,我不能执行'this.get('view')。set('isEditing',true);'我该怎么做?也许可以更改我的路由器,以便将“操作”委派给视图,然后再委托给控制器? –
在您的视图中添加“isEditing”是基于您只是在改变渲染方式的假设。对不起,我应该更清楚了。我可能只是将该字段移回到您的评论,但一定要从控制器而不是模型本身进行设置。 – Drew
你的假设是正确的:我*只*改变它的渲染方式,所以我确信'isEditing'属于视图。您可以评论我是否应该首先将操作委托给视图,或者先将控制器委托给路由器? –