Knockout.js 淘汰x-可编辑覆盖按钮文本

Knockout.js 淘汰x-可编辑覆盖按钮文本,knockout.js,knockout-2.0,x-editable,jeditable,knockout-3.0,Knockout.js,Knockout 2.0,X Editable,Jeditable,Knockout 3.0,问题是,可编辑的会覆盖按钮内的默认文本。在本例中,字形图标被选择的值替换 这是默认行为,但我只想修改Knockout变量,并保持按钮html内容不变 editableOptions中是否有选项或其他方法来禁用此行为 var viewModel=function(){ this.selection=ko.observable(); this.options=ko.observearray([{value:“AND”,label:“All”},{value:“OR”,label:“Any”}]);

问题是,
可编辑的
会覆盖按钮内的默认文本。在本例中,
字形图标
选择
的值替换

这是默认行为,但我只想修改Knockout变量,并保持按钮html内容不变

editableOptions
中是否有选项或其他方法来禁用此行为

var viewModel=function(){
this.selection=ko.observable();
this.options=ko.observearray([{value:“AND”,label:“All”},{value:“OR”,label:“Any”}]);
this.hidden=函数(){return false};
};
应用绑定(新的viewModel())

看着,我发现

没有控制它的选项,因此您无法更改它。您将需要使用绑定处理程序的修改版本来删除此项

我可以通过修改绑定处理程序的一个块来获得您想要的效果,如下所示:

    //create editable
    var glyphHtml = $element.html(); // saves the original contents of the button
    var $editable = $element.editable(editableOptions);

    //update observable on save
    if (ko.isObservable(value)) {
      $editable.on('save.ko', function(e, params) {
        value(params.newValue);
      })
    };

    if (editableOptions.save) {
      $editable.on('save', editableOptions.save);
    }

    //setup observable to fire only when editable changes, not when options change
    //http://www.knockmeout.net/2012/06/knockoutjs-performance-gotcha-3-all-bindings.html
    ko.computed({
      read: function() {
        var val = ko.utils.unwrapObservable(valueAccessor());
        // Restores the original contents of the button.
        setTimeout(function() {
          $editable.html(glyphHtml);
        }, 0);
      },
      owner: this,
      disposeWhenNodeIsRemoved: element
    });

好问题。但是,特定于版本的标记可能是多余的,对吗?也就是说,您描述的问题不是特定于版本的(除了任何最低版本要求)?对。这似乎是支持者的行为,而不是特定于版本的问题。我认为它适用于
div
span
,但我不希望
按钮出现这种情况,我只希望显示可编辑项,并在其他地方使用该值。你是对的,这会阻止设置初始值。但是,一旦做出选择,
按钮
html内容仍然会被替换。@PeterGerhat这不仅仅是初始设置。这是每次选择时都会触发的代码。@PeterGerhat但您是对的,可编辑项在更新时仍在更改。原始的x-editable大约有7000行,这使得编辑变得不太好。@PeterGerhat对绑定处理程序的修改现在包含在答案中。
    //create editable
    var glyphHtml = $element.html(); // saves the original contents of the button
    var $editable = $element.editable(editableOptions);

    //update observable on save
    if (ko.isObservable(value)) {
      $editable.on('save.ko', function(e, params) {
        value(params.newValue);
      })
    };

    if (editableOptions.save) {
      $editable.on('save', editableOptions.save);
    }

    //setup observable to fire only when editable changes, not when options change
    //http://www.knockmeout.net/2012/06/knockoutjs-performance-gotcha-3-all-bindings.html
    ko.computed({
      read: function() {
        var val = ko.utils.unwrapObservable(valueAccessor());
        // Restores the original contents of the button.
        setTimeout(function() {
          $editable.html(glyphHtml);
        }, 0);
      },
      owner: this,
      disposeWhenNodeIsRemoved: element
    });