【问题标题】:Filter collection by multi-reference field按多参考字段过滤集合
【发布时间】:2020-05-29 06:40:20
【问题描述】:

我正在尝试在函数执行其工作之前通过多引用字段过滤集合。

我使用了这个 wix 示例,但我不希望它过滤整个集合 https://www.wix.com/corvid/example/filter-with-multiple-options

我是新手,可能做错了这是我设法弄清楚的


import wixData from 'wix-data';

const collectionName = 'Blog/Posts'
//const collectionName = wixData.query('Blog/Posts').contains("categories", ["O -Fitness"]);

const fieldToFilterByInCollection = 'hashtags';


$w.onReady(function () {

    setRepeatedItemsInRepeater()
    loadDataToRepeater()

    $w('#tags').onChange((event) => {
        const selectedTags = $w('#tags').value
        loadDataToRepeater(selectedTags)
    })
});

function loadDataToRepeater(selectedCategories = []) {

    let dataQuery = wixData.query(collectionName)//.contains("categories", ["O -Fitness"]);


    if (selectedCategories.length > 0) {
        dataQuery = dataQuery.hasAll(fieldToFilterByInCollection, selectedCategories)
    }

    dataQuery
        .find()
        .then(results => {
            const itemsReadyForRepeater = results.items
            $w('#Stories').data = itemsReadyForRepeater;

            const isRepeaterEmpty = itemsReadyForRepeater.length === 0

            if (isRepeaterEmpty) {
                $w('#noResultsFound').show()
            } else {
                $w('#noResultsFound').hide()
            }
        })
}

function setRepeatedItemsInRepeater() {
    $w('#Stories').onItemReady(($item, itemData) => {

        $item('#image').src = itemData.coverImage;
        $item('#title').text = itemData.title;
        if ($item("#title").text.length > 40){
        $item("#title").text =$item("#title").text.slice(0, 40) + '...' ;}
        $item('#excerpt').text = itemData.excerpt;
        if ($item('#excerpt').text.length > 100){
        $item('#excerpt').text =$item('#excerpt').text.slice(0, 100) + '...' ;}     



    })
}

这是我正在尝试添加的评论位


const collectionName = wixData.query('Blog/Posts').contains("categories", ["O -Fitness"]);

提前致谢

【问题讨论】:

  • 您能否详细说明其中的哪一部分不起作用?现在,既然您已经实施了您的解决方案,究竟是什么不起作用?
  • @vaibhavmande 对不起,而不是像这样阅读这个集合 ` const collectionName = 'Blog/Posts'` 我想预过滤名为类别的博客/帖子字段,键为 O -Fitness 这样但是它不起作用const collectionName = wixData.query('Blog/Posts').contains("categories", ["O -Fitness"]);

标签: velo


【解决方案1】:

您使用“hasAll”过滤多引用字段。 'hasSome' 处理多引用,但 'hasAll' 不处理此字段类型。

你可以使用:

selectedCategories.map(category => {
   dataQuery = dataQuery.hasSome(fieldToFilterByInCollection, category)
})

这与 hasAll 相同 - hasSome(x) & hasSome(Y) = hasAll(x,y) - 但因为 'hasSome' 正在处理多引用,所以它会起作用:)

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多