当通过jQuery更新原始内容时,如何告诉PageDown更新其预览?

时间:2013-11-28 19:46:42

标签: javascript jquery knockout.js pagedown

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"));  

1 个答案:

答案 0 :(得分:1)

首先,在自定义绑定中添加update处理程序,以便在更改observable时刷新预览。完成后,通过更改observable而不是直接更改元素的val来进行所有程序更改;这样Knockout将检测到值已更改并调用新的update处理程序,该处理程序将告诉编辑器刷新。