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