0

JSFiddle:http: //jsfiddle.net/92z35/2/

我有一个目前运行良好的 Pagedown 编辑器,除了我必须以编程方式插入一些内容的少数情况。如果我插入然后键入,则预览会更新。但如果我只是插入,预览保持不变。

我错过了什么?

代码:

var converter = Markdown.getSanitizingConverter();
converter.hooks.chain("preBlockGamut", function (text, rbg) {
    return text.replace(/^ {0,3}""" *\n((?:.*?\n)+?) {0,3}""" *$/gm, function (whole, inner) {http://jsfiddle.net/BcuLq/#run
        return "<blockquote>" + rbg(inner) + "</blockquote>\n";
    });
});

var editor = new Markdown.Editor(converter);
ko.bindingHandlers.wysiwyg = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
        editor.hooks.chain("onPreviewRefresh", function () {
            $(element).change();
        });
        editor.run();
    }
};

var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);

    this.fullName = ko.computed(function() {
        return this.firstName() + " " + this.lastName();
    }, this);

    this.appendText = function(){
    $("#wmd-input").val($("#wmd-input").val() + '@')
    }
};

ko.applyBindings(new ViewModel("Planet", "Earth"));  
4

1 回答 1

1

首先,将一个update处理程序添加到您的自定义绑定中,该处理程序会在可观察对象更改时导致预览刷新。完成此操作后,通过更改可观察对象而不是直接更改元素的val;来进行所有程序化更改。这样,Knockout 将检测到该值已更改并调用您的新update处理程序,该处理程序将告诉编辑器刷新。

于 2013-11-28T23:16:57.010 回答