JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – Ember关联和嵌套URL大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我们正在使用Ember数据和Rails实现一个功能,并继续遇到麻烦.我们不确定这是否是我们的代码的问题,Ember或Ember数据的错误,或者仅仅因为缺乏文档我们没有得到它.

任何帮助将非常感激.

轨道

我们有一个待办事项清单,有多个条目.在Rails中,它们的设置如下:

class ToDo < ActiveRecord::Base
   has_many :to_do_entries,dependent: :destroy
   alias_method :entries,:to_do_entries
   validates_presence_of :title
end

class ToDoEntry < ActiveRecord::Base
  attr_accessible :completed_at,:is_deleted,:priority,:title

  belongs_to :to_do
  alias_method :parent,:to_do

  validates_presence_of :to_do,:title     
end

路由设置为嵌套:

resources :to_dos do 
   resources :to_do_entries do
   end
end

因此,结束URL最终为/ to_do /:to_do_id / to_do_entry /:to_do_entry_id.

我们正在使用active_model_serializers gem并设置以下序列化程序:

class ToDoSerializer < ActiveModel::Serializer
  attributes :id,:title

  has_many :to_do_entries,embed: :objects
end

class ToDoEntrySerializer < ActiveModel::Serializer
  attributes :id,:to_do_id,:title,:priority

  has_one :to_do
end

我们使用的是Ember数据和REST适配器,等效模型的设置如下:

App.ToDo = DS.Model.extend({
  title: DS.attr('string'),entries: DS.hasMany('App.ToDoEntry',{ embedded: true })
});

App.ToDoEntry = DS.Model.extend({
  title: DS.attr('string'),to_do_id: DS.attr('number'),priority: DS.attr('number'),todo: DS.belongsTo('App.ToDo')
});

问题

我的理解是,我们应该能够通过在控制台中使用以下内容直接从ToDo访问条目列表:

> t = App.ToDo.find(21)
> e = t.get("entries")

这似乎有效,但只返回一个类,我不知道如何调试它,看看它是否正常工作.

我有两个具体问题:

>我们如何使用控制台调试关联并确保它们正常工作.
>如果我们单独加载条目(而不是将它们嵌入父项中),我们如何才能使用上面的嵌套路由?

最佳答案
首先,从模型中获取关联会返回DS.ManyArray,其中包含您所假设的对象.
有几种方法可以调试它,首先它响应常规数组方法,如length,firstObject,lastObject,objectAt.
如果这还不够有用,它也会响应toArray,它将它转换为一个vanilla JS Array.

不幸的是,最新的ember-data迭代实际上删除了嵌入式记录(我认为这可能是暂时的).目前,默认RESTAdapter不支持嵌套资源URL,但您始终可以根据自己的需要对其进行自定义

然而,有关将嵌套资源放入核心的工作正在进行,请参阅PR的#367#257

大佬总结

以上是大佬教程为你收集整理的javascript – Ember关联和嵌套URL全部内容,希望文章能够帮你解决javascript – Ember关联和嵌套URL所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: