gpt4 book ai didi

javascript - 如何使用 ember-rest Controller 来处理 Rails3 嵌套资源?

转载 作者:数据小太阳 更新时间:2023-10-29 06:12:59 28 4
gpt4 key购买 nike

我是客户端 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

现在的问题是我必须编写 ember-rest Controller :

App.commentsController = Ember.ResourceController.create({ 资源类型:App.Comment resourceURL: '/conversations/:id/comments'});

我不认为我可以在中间使用 :id ;我怎么能解决这个问题? ember-data 能解决这个问题吗?似乎 spine.js 集成会更容易处理这个问题。提前致谢!

最佳答案

从昨天开始,我一直想回答您对我的帖子的评论,所以很高兴您在这里提出这个问题。

首先我应该说,我将 ember-rest 编写为 jQuery.ajax 之上的一个非常薄的层。它不是很先进,甚至没有内置的协会设施。但是,我正在考虑添加一个,因为这个库得到了相当多的使用。正如您将从下面的代码中看到的,这个概念可以处理,但应该在库中更好地抽象。

可以通过在每个父资源中创建资源 Controller 的实例来处理关联。每个特定的资源 Controller 应该管理特定的资源数组,但不一定是特定类型的所有资源。

在您的情况下,您可以扩展 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";
}
});

然后您可以为每个对话配置一个 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 }));
}
});

最后但同样重要的是,您需要检索每个对话的评论:

  conversation.get("comments").findAll();

如果您在 json 中拥有所有评论,您也可以使用 loadAll()。何时何地调用 loadAll() 或 findAll() 取决于应用程序的需要。显然,您需要减少 ajax 调用的次数以获得最佳性能。

Ember-data 是一个比 ember-rest 更雄心勃勃的项目,并且已经支持关联以及事务等高级功能。话虽如此,它正在通过不断变化的 API 进行非常积极的开发。如果您有耐心并愿意深入研究代码,我强烈建议您尝试一下。等尘埃落定后,我也打算写一篇博客。

关于javascript - 如何使用 ember-rest Controller 来处理 Rails3 嵌套资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519646/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com