问题描述
在 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 (将#修改为@)