在将查询响应分配给模型字段时丢失大量的ember-data类属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在将查询响应分配给模型字段时丢失大量的ember-data类属性相关的知识,希望对你有一定的参考价值。

在我的EmberJS应用程序中,我有两个模型,Book和Page。 Book与Page具有hasMany关系。在我的控制器中编辑一本书,我正在进行查询以获取与该书相关的所有页面,然后将查询中的响应分配回书籍的页面字段。

我正在使用第三方EmberJS库ember-models-table来制作分页表。我将book.pages传递给分页表组件,一切正常,除非我想实际在结果页之间移动。我正在使用的ember-models-table版本期望在分页结果时book.pages上的某些字段存在:meta,query,store和type.modelName。我可以明确地将这些字段设置到book.pages上,但我觉得必须有更好的方法。当您将响应设置为另一个对象时,为什么EmberJS会从ember-data查询响应中删除元和存储等字段?

调节器

this.get('store').query('page', { bookId }).then((res) => {
    set(book, 'pages', res);

    // Third Party Paginated Table Component Requires These Fields
    set(book, 'pages.meta', res.get('meta'));
    set(book, 'pages.query', res.get('query'));
    set(book, 'pages.store', res.get('store'));
    set(book, 'pages.type.modelName', res.get('type.modelName'));
});

HBS - 页面表

{{models-table-paginated
  data=book.pages
  columns=columns
  customClasses=(hash table='table table-condensed')
  showGlobalFilter=false
  showColumnsDropdown=false
  selectRowOnClick=false
  pageSize=10
}}
答案

您还需要编辑序列化程序。例如,我也使用models-table,但在后端,我使用Django适配器。因此,我必须为每个模型编辑序列化程序以计算剩余页面(totalPages)并根据pageSize形成该编号以进行分页。同样在查询路线时,您需要将pageSize和page设置为默认值。现在,如果您不使用像Django这样的元,您应该检查您的适配器文档

例如,在Django中,书籍模型的序列化将是这样的

import DRFSerializer from './drf';
import DS from 'ember-data';
import { isNone } from '@ember/utils';

export default DRFSerializer.extend(DS.EmbeddedRecordsMixin,{
  extractMeta: function(store, type, payload) {
    let meta = this._super(store, type, payload);
    if (!isNone(meta)) {
      // Add totalPages to metadata.
      let totalPages = 1;
      if (!isNone(meta.next)) {
        // Any page that is not the last page.
        totalPages = Math.ceil(meta.count / payload[type.modelName].length);
      } else if (isNone(meta.next) && !isNone(meta.previous)) {
        // The last page when there is more than one page.
        totalPages = meta.previous + 1;
      }
      meta['totalPages'] = totalPages;
    }
    return meta;
  }

以上是关于在将查询响应分配给模型字段时丢失大量的ember-data类属性的主要内容,如果未能解决你的问题,请参考以下文章

将 Ajax 响应分配给 php 变量

无法将 JSON 响应分配给预先声明的数组

如何将从webapi返回的自定义对象数组的HttpResponse响应分配给打字稿角度中相同数组类型的对象?

Ember - 嵌套子路由在路由刷新/重新加载时丢失模型

lumen 6:如何在 lumen 上重构响应分页的数据?

使用 JSON 响应快速调用函数时出错