如何从Firestore集合中创建一个离子重排组

时间:2019-05-04 18:57:54

标签: ionic-framework collections google-cloud-firestore

我需要从Firestore集合创建一个ion-reorder-group。由于可以实时更新要重新排序的列表,因此可以更精确地从可观察的对象获取数据。

我从@Mirinda Corwin(Ionic / Firebase - error splice is not a function (reorderArray))那里获得了一些代码。

这是我的代码,改编自Mirinda的答案:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;

import java.beans.PropertyEditorSupport;
import java.io.IOException;

@ControllerAdvice
public class StringTrimModule extends PropertyEditorSupport {

    @Component
    public class JsonStringTrimModule extends SimpleModule {
        public JsonStringTrimModule() {
            addDeserializer(String.class, new StdDeserializer<String>(String.class) {
                @Override
                public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
                    switch (jsonParser.getCurrentName()) {
                        case "password":
                            return _parseString(jsonParser, context);
                        default:
                            return trim(_parseString(jsonParser, context));
                    }
                }
            });

            addSerializer(String.class, new StdSerializer<String>(String.class) {
                @Override
                public void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {
                    gen.writeString(trim(value));
                }
            });
        }
    }

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.setDisallowedFields("*password");
        binder.registerCustomEditor(String.class, this);
    }

    @Override
    public void setAsText(@Nullable String text) {
        if (text == null) {
            setValue(null);
        } else {
            String value = trim(text);
            if ("".equals(value)) {
                setValue(null);
            } else {
                setValue(value);
            }
        }
    }

    private String trim(String value) {
        return value.trim().replaceAll("( )+", " ");
    }
}

但是出现以下错误:“ take不是可观察的属性”。

1 个答案:

答案 0 :(得分:0)

当前版本的RxJS更改了将运算符应用于流的方法,应使用“管道”方法:

this.membersList$.pipe(take(1)).subscribe(...);

https://www.learnrxjs.io/operators/filtering/take.html