Prosemirror:为什么在他们的组中插入星星失败并标记示例

问题描述

在 Prosemirror“组和标记”模式示例中(位于 https://prosemirror.net/examples/schema/)(每个人都可以在此处查看其代码 https://glitch.com/edit/#!/tidy-guttural-firewall

如果我让boring_paragraph接受标记(通过评论标记条目,将有可能 使用 "Ctrl-q" 添加链接(参见功能 toggleLink),但为什么插入星星(使用 "Ctrl-Space")仍然失败

let starSchema = new Schema({
      nodes: {
        text: {
          group: "inline",},star: {
          inline: true,group: "inline",todoM() {
            return ["star","?"];
          },parseDOM: [{ tag: "star" }],paragraph: {
          group: "block",content: "inline*",todoM() {
            return ["p",0];
          },parseDOM: [{ tag: "p" }],boring_paragraph: {
          group: "block",content: "text*",// marks: "",// <---- marks is commented,so boring_paragraph can accept marks
          todoM() {
            return ["p",{ class: "boring" },parseDOM: [{ tag: "p.boring",priority: 60 }],doc: {
          content: "block+",marks: {
        shouting: {
          todoM() {
            return ["shouting",parseDOM: [{ tag: "shouting" }],link: {
          attrs: { href: {} },todoM(node) {
            return ["a",{ href: node.attrs.href },parseDOM: [
            {
              tag: "a",getAttrs(dom) {
                return { href: dom.href };
              },],inclusive: false,});

这是 insertStar 命令:为什么 canReplaceWith 测试失败?!

function insertStar(state,dispatch) {
      let type = mySchema.nodes.star;
      let { $from } = state.selection;
      /*

        canReplaceWith(from: number,to: number,type: NodeType,marks: ?⁠[Mark]) → bool
          Test whether replacing the range from to to (by index) with a node of the given type would leave the node's content valid.

      */
      if (!$from.parent.canReplaceWith($from.index(),$from.index(),type)) {
        console.error("insertStar will return false");
        return false;
      }
      /*
        replaceSelectionWith(node: Node,inheritMarks: ?⁠bool) → Transaction
          Replace the selection with the given node. 
          When inheritMarks is true and the content is inline,it inherits the marks from the place where it is inserted.
      */
      dispatch(state.tr.replaceSelectionWith(type.create()));
      return true;
    }

好吧,我认为插入星星与标记无关,但为什么会失败?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)