Jer*_*eng 5 javascript model-view-controller ruby-on-rails ember.js
我是客户端Javascript MVC的新手,第一个ember.js应用程序.
我按照这里的说明使用ember-rest创建嵌套模型的后评论类型.
http://www.cerebris.com/blog/2012/01/26/beginning-ember-js-on-rails-part-2/
我开始编写嵌套资源如下:
resources :conversations do
resources :comments
end
Run Code Online (Sandbox Code Playgroud)
现在的问题是我必须编写余烬控制器:
App.commentsController = Ember.ResourceController.create({resourceType:App.Comment resourceURL:'/ conversations /:id/comments'});
我不认为我可以在中间使用:id; 我怎么能解决这个问题?ember-data能解决这个问题吗?似乎spine.js集成将更容易处理这个.提前致谢!
从昨天开始,我一直想回答你对我的帖子的评论,所以我很高兴你在这里提出这个问题.
我应该首先说,我将ember-rest写为jQuery.ajax上的一个非常薄的层.它不是非常先进,甚至没有内置的协会设施.但是,我正在考虑添加一个,因为这个lib正在得到一些使用.正如您将从下面的代码中看到的那样,可以处理这个概念,但应该在lib中更好地抽象.
可以通过在每个父资源中创建资源控制器的实例来处理关联.每个特定资源控制器应该管理特定的资源数组,但不一定是特定类型的所有资源.
在您的情况下,您可以扩展ResourceController以管理对话的注释:
App.ConversationComments = Ember.ResourceController.extend({
resourceType: App.Comment,
// override _resourceUrl() to base the url on the conversation
_resourceUrl: function() {
return this.get("conversation")._resourceUrl() + "/comments";
}
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以为每个对话配置ConversationComments的实例:
App.Conversation = Ember.Resource.extend({
resourceUrl: '/conversations',
resourceName: 'conversation',
resourceProperties: ['prop1', 'prop2']
// init comments
init: function() {
this.set("comments", App.ConversationComments.create({ conversation: this }));
}
});
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,您需要检索每个对话的评论:
conversation.get("comments").findAll();
Run Code Online (Sandbox Code Playgroud)
如果你有json中的所有注释,你也可以使用loadAll().调用loadAll()或findAll()的位置和时间取决于您的应用程序的需求.显然,您需要减少ajax调用的次数以获得最佳性能.
Ember-data是一个比ember-rest更雄心勃勃的项目,并且已经支持关联以及事务等高级功能.话虽如此,它正在通过不断变化的API进行非常积极的开发.如果您耐心并愿意深入研究代码,我强烈建议您尝试一下.当尘埃落定时,我也打算在博客上发表评论.
| 归档时间: |
|
| 查看次数: |
1756 次 |
| 最近记录: |