asp.net-mvc – Knockout,CKEditor&Single Page App

我有一个情况涉及KnockoutJS& CKEditor的。

基本上,我们的网站是“单页”应用程序风格的一部分,目前它只涉及2页,但可能会随着时间而扩展,目前它只是一个“列表”页面和一个“管理”页面名单。

管理页面本身需要一些丰富的文本编辑器,我们已经与CKEditor进行了一个全面的解决方案。

因为这两个页面是“单页”风格,显然CKEditor无法注册管理元素,因为它们不在页面加载 – 简单足够的问题来修复。所以作为一个例子,我把CKEditor附加在一个很好的点击事件上。接下来的问题是,已经安装的Knockout可观察器没有被更新,因为CKEditor实际上并没有修改它附加的textarea,它也创建了你实际编辑的所有这些div / html元素。

经过一段时间的googleing,我发现有人用TinyMCE – http://jsfiddle.net/rniemeyer/GwkRQ/做了这个例子,所以我以为我可以适应CKEditor类似的东西。

目前,我非常接近有一个工作的解决方案,我已经初始化并使用这种技术更新正确的观察(我将在底部发布代码),甚至正确地发布到服务器 – 太棒了。

我目前遇到的问题是“单页”应用程序部分和CKEditor的重新初始化。

基本上,您可以从列表中单击以进行管理,然后保存(返回到列表页面),然后当您转到另一个“管理”CKEditor初始化时,它没有任何值,我已经检查更新代码(以下)和“值”绝对具有正确的值,但不会被推送到CKEditor本身。

也许对于CKEditor的流程/初始化过程缺乏了解,或者缺乏对敲除绑定的理解,或者这是为单页应用程序设置的框架的问题 – 我不确定。

这是代码:

//Test one for ckeditor
ko.bindingHandlers.ckeditor = {
    init: function (element,valueAccessor,allBindingsAccessor,context) {
        var options = allBindingsAccessor().ckeditorOptions || {};
        var modelValue = valueAccessor();

        $(element).ckeditor();

        var editor = $(element).ckeditorGet();

        //handle edits made in the editor
        editor.on('blur',function (e) {
            var self = this;
            if (ko.isWriteableObservable(self)) {
                self($(e.listenerData).val());
            }
        },modelValue,element);


        //handle destroying an editor (based on what jQuery plugin does)
        ko.utils.domNodeDisposal.addDisposeCallback(element,function () {
            var existingEditor = CKEDITOR.instances[element.name];
            existingEditor.destroy(true);
        });
    },update: function (element,context) {
        //handle programmatic updates to the observable
        var value = ko.utils.unwrapObservable(valueAccessor());
        $(element).html(value);
    }
};

所以在HTML中,当初始化ViewModel时,它是一个相当标准的“数据绑定:ckeditor”,它可以为其绑定。

我把调试器在代码中查看流程,看起来像是在我第一次加载init的时候加载,然后更新,当我第二次进入ko.utils.domNodeDisposal来处理元素的时候。

我试图不破坏它,CKEditor然后抱怨说,这个名称已经存在。我试图不破坏它,检查它是否存在和初始化,如果它不 – 这是第一次工作,但第二次没有CKEditor。

我认为只有一件事我失踪了,这将使它工作,但我已经耗尽了所有的选择。

有没有人有任何知识可以帮助我整合这3件事情?

那里有什么淘汰专家可能能够帮助我吗?

任何帮助将不胜感激。

MD

解决方法

对于有兴趣的人我排序:

所有这一切都是一个基本的执行顺序,我只需要在初始化之前将该值设置为textarea html。

请注意,它使用jquery适配器扩展来在元素上执行.ckeditor()。

可能还有一个更好的方法来做“模糊”部分。

此扩展也不适用于当前的选项,但应该相当简单。

ko.bindingHandlers.ckeditor = {
    init: function (element,context) {
        var options = allBindingsAccessor().ckeditorOptions || {};
        var modelValue = valueAccessor();
        var value = ko.utils.unwrapObservable(valueAccessor());

        $(element).html(value);
        $(element).ckeditor();

        var editor = $(element).ckeditorGet();

        //handle edits made in the editor

        editor.on('blur',element);
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


判断URL文件是不是在于在。private static bool UrlIsExist(string url){ System.Uri u = null; try { u = new Uri(url); } catch { return false; } bool isExist = false;
由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值。立马报错。解决方案一:在.aspx文件头中加入这句:解决方案二:修改web.config文件:因为validateRequest默认值为true。只要设为false即可。
public static bool ProcessIdCard(this string idCard, out DateTime birthday, out string genderName) { bool result; birthda...
如果你在GridView控件上设置 AllowPaging="true" or AllowSorting="true" 而没有使用使用数据源控件 DataSource (i.e. SqlDataSource, ObjectDataSource),运行则会出现下
protected void Page_Load(object sender, EventArgs e){ ScriptManager sm = Page.Master.FindControl("ScriptManager1") as ScriptManager; if (sm
1. install all features in IIS2. Try the following steps to register it.run %windir%\Microsoft.NET\Framework\v4.0.21006\aspnet_regiis.exe -i或运行,跳出如下错误
一般来说一个 HTML 文档有很多标签,比如“”、“”、“”等,想把文档中的 img 标签提取出来并不是一件容易的事。由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易。于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 img 标签。我们可以
asp.net updatepanel 局部刷新,导致JS不能加载,而无法使用,而且 updatepanel会刷两次,郁闷的。解决方法如下:
FileHandlerhttp://www.cnblogs.com/vipsoft/p/3627709.htmlUpdatePanel无法导出下载文件:http://www.cnblogs.com/vipsoft/p/3298299.html//相对路径下载。path: ~/DownLoad///p
本地能上传文件,部署到服务器上就报Cannot access a closed file 错误,以下是解决方法: 最重要是requestLengthDiskThreshold此属性设置输入流缓冲阈值。
http://tool.oschina.net/commons字符十进制转义字符"""&&&>>不断开空格(non-breaking space) HTML特殊转义字符
1、2两步为推荐做法1. 将MySql.Data.dll放到 bin目录下面,或都安装mysql-connector-net-6.0.0.msi2.web.config 添加如下节点,注册版本号一致 3.全局配置在C:\WINDOWS\Microsoft.NET\Framework\v2.0.507
C# 跳转新页面string url = "http://www.vipsoft.com.cn";ResponseRedirect.Redirect(Response, url, "_blank", "'toolbar=0,scrollbar
.NET Core 在其上下文中,该请求的地址无效。 看了端口,发现没被占用,后来发现是IP地址变了 改成正确的IP就可以了。
datatable是一个jquery扩展的表格插件。其提供了强大的表格功能。官方地址:http://www.datatables.net/在官方示例中,对于表格的是否可排序是在初始化中设置的一个值来决定的$(".datatable-simplified").dataTable(
Html table 细边框 导航页档 军事 历史 ...
C# 跳转新页面判断URL文件是不是在于在。C# 指定物理目录下载文件,Response.End导致“正在中止线程”异常的问题public class FileHandler { public static bool DownLoadFile(string path, string fileName
由于将IE11升级到了 11 之前的网站无法正常使用,如果是开发人员碰到之问题,使用了微软的asp.net 控件,那么将服务器的.net framework 升级到 4.5http://www.microsoft.com/en-us/download/details.aspx?id=30653如果浏
引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用。 在开始之前,我们还是重温一下部署原理,正如你所常见的.Net Core 部署图: 在Linux上部署.Net Core App最好的方式是在Linux机器