Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

onLoad 事件中调用 setMarkdown, Preview部分没有触发更新 #25

Closed
tylerlong opened this issue Mar 3, 2015 · 5 comments
Closed

Comments

@tylerlong
Copy link
Contributor

此问题在v1.1.5中没有发现,v1.1.6中发现的。

以这个为例子: https://pandao.github.io/editor.md/examples/onload.html

注释掉原来的onLoad代码,添加一行setMarkdown调用,最终代码如下:

onload : function() {
    //alert("onload");
    //console.log("onload =>", this, this.id, this.settings);
    testEditor.setMarkdown("test onload");
}

载入页面之后,发现左侧的markdown内容已经变成了“test onload”, 但是右侧的预览并没有跟上。

只有在onLoad事件中调用setMarkdown才能重现这个问题。 之后再调用setMarkdown都是没问题的。

我猜测原因可能是: onLoad事件中,其实整个editor还没有彻底准备好,这时候调用它的某些方法会工作不正常。

建议解决方案: 等editor一切都ready之后再触发onLoad事件。 或者增加一个新的onReady事件。

@pandao
Copy link
Owner

pandao commented Mar 3, 2015

老问题了,Editor.md所依赖的模块是动态加载的,且不是同步的,所以在Editor.md还没完全load之前不能直接调用Editor.md的实例对象。
onload事件的回调函数里要用this来调用方法,像onchangeonload等事件回调函数里可以用this来指向当前的Editor.md实例对象。
this是代理的$.proxy(settings.onload, this)();,所以可以直接用this来调用实例对象。

@tylerlong
Copy link
Contributor Author

是否能检测所有模块都加载完?onload事件中的代码,应该能够假设所有的都已经加载完了,否则就太奇怪了。 那不如名字改为 onloading

实际的代码可能会很复杂,比如editor是全局变量,在onload中调用了其它的全局函数, 这个全局函数中又调用了editor的某些方法。 这时候应该没办法用this。

@pandao
Copy link
Owner

pandao commented Mar 3, 2015

onload是一个配置项,是在完全load之后触发的事件回调。
只是你不能用Editor.md实例对象变量在onload里调用方法,应该使用this
全局函数也是能用this的。
异步加载依赖模块,又想同步调用, 目前可以说“无解”,在些应用条件又不能用ES6。

另外,如果新增一个方法onload,也是不能同步触发,也是等同于settings.onload,也是在完全load后触发。

@pandao
Copy link
Owner

pandao commented Mar 3, 2015

搞清楚了,发现你提的问题的原因了,原来settings.onloadCodeMirror.on("change")之前触发了,change事件还没注册就触发了onload回调。

改正后,可以在onload回调里直接使用实例对象变量调用方法,testEditor.xxxxx()

@pandao
Copy link
Owner

pandao commented Mar 3, 2015

@v1.1.7 fixed.

@pandao pandao closed this as completed Mar 3, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants