在Shopware VUE组件中,对于管理中的编辑器/设计器,我获得了以下代码以从自定义实体获取数据:

fetchTeam({ targetId }) {
  this.teamRepository.get(targetId).then((team) => {
    this.$set(this.element.data, 'team', team);
  });
},

例如,它向API发送一个HTTP请求并检索预期的数据;问题是数据从未加到this.element.data;添加了team属性,但它总是用null作为值填充.

我试图从Shopware自己的代码中寻找灵感,他们有一些非常类似的东西,但我不确定我是否在错误的上下文中使用了代码.

在开发人员工具中,我可以看到XHR请求已执行,并返回预期的数据,因此这可能只是一个小问题.

What I want to do:个 我的 idea 是:

  1. 我希望在编辑页面时从后端获取数据,而不是将所有数据保存在CMS元素配置中.

  2. 当在自定义CMS element打开的情况下从编辑器保存页面时,实体的ID应该保存在元素配置中,该元素配置在其他地方(在编辑器和店面中)用于从实体检索数据.

  3. 最后,在店面,我还会重新获取数据.我还没有开始这个代码,但希望它是可能的.

推荐答案

你的 idea 是对的.将实体的ID存储在元素配置中,然后创建一个CMS Element Resolver,它使用该ID为您的元素获取数据.

class MyElementResolver extends AbstractCmsElementResolver
{
    public function getType(): string
    {
        return 'myElementType';
    }

    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        $teamConfig = $slot->getFieldConfig()->get('team');

        if (!$teamConfig) {
            return null;
        }

        $teamId = $teamConfig->getValue();
        $criteria = new Criteria([$teamId]);

        $criteriaCollection = new CriteriaCollection();
        $criteriaCollection->add('team_' . $slot->getUniqueIdentifier(), TeamDefinition::class, $criteria);

        return $criteriaCollection;
    }

    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $searchResult = $result->get('team_' . $slot->getUniqueIdentifier());
        if (!$searchResult) {
            return;
        }

        $teamConfig = $slot->getFieldConfig()->get('team');

        $team = $searchResult->get($teamConfig->getValue());
        if (!$team instanceof TeamEntity) {
            return;
        }

        $slot->setData($team);
    }
}

Vue.js相关问答推荐

vue router/:param 斜杠的参数

使用带有 v-date-picker 的 new Date() 不起作用

确保在渲染组件之前加载 Vuex 状态

错误:您可能需要额外的加载器来处理这些加载器的结果.

W3C 验证和 Vue 的 HTML 绑定语法

带有子菜单的 Vuetify 导航抽屉

vuetify:以编程方式显示对话框

Vue.js:从 parent父Vue 获取数据

我在 Nuxt 2.14.0 中运行的是什么版本的 Vue?

从我的服务访问路由实例

我可以使用react路由创建别名路由吗?

Vue CLI - 将构建输出组合到单个 html 文件

根据路由动态插入 CSS 类到导航栏

我如何能够在 vue js html 中以给定格式进行多项 Select 和传递数据?

用于本地编辑的 Vuex 克隆对象

Vue Chart.js - 条形图上的简单点/线

路由使用 nuxt-i18n 在 nuxt 中推送区域设置路由

仅在提交时验证 vuetify 文本字段

如何使用vue js判断组件本身的数据何时发生变化?

Vue - 重用方法的最佳方式