Knockout.js 初始化jQuery fileupload后,如何将击出js绑定重新应用于文件输入元素?

Knockout.js 初始化jQuery fileupload后,如何将击出js绑定重新应用于文件输入元素?,knockout.js,jquery-file-upload,Knockout.js,Jquery File Upload,我已经设置了一个viewModel,它可以从文本输入中获取宽度和高度。我想将该宽度和高度传递给文件输入的数据宽度和数据高度属性 我用它来处理文件上传过程。我看到的问题是,在将文件添加到文件输入后,当文本输入发生更改时,数据属性的绑定不再更新 html 当输入元素更新时,如何确保绑定保持或至少重新绑定到文件输入?您看到这种行为是因为选择了jQuery.fileupload.js: 默认情况下,文件输入字段将在每次输入后替换为克隆 输入字段更改事件。 这是iframe传输队列所必需的 并允许为相同

我已经设置了一个viewModel,它可以从文本输入中获取宽度和高度。我想将该宽度和高度传递给文件输入的数据宽度和数据高度属性

我用它来处理文件上传过程。我看到的问题是,在将文件添加到文件输入后,当文本输入发生更改时,数据属性的绑定不再更新

html


当输入元素更新时,如何确保绑定保持或至少重新绑定到文件输入?

您看到这种行为是因为选择了
jQuery.fileupload.js

默认情况下,文件输入字段将在每次输入后替换为克隆 输入字段更改事件。
这是iframe传输队列所必需的 并允许为相同的文件选择触发更改事件,但 可以通过将以下选项设置为false来禁用该选项:
replaceFileInput:true

因此,任何敲除绑定都不会(再)应用于此克隆

下面的示例在上载按钮(作为其工具提示)上有一个附加的
标题
绑定到viewmodel的
宽度
属性,以表明这不仅影响绑定的
数据-
属性

请注意,当
replaceFileInput
设置为
false
时,
标题在选择文件后仍会更新

请注意,只有在应用程序不需要iframe传输队列的情况下,才能应用此选项

var ViewModel=函数(宽度、高度){
此宽度=可观察的ko(宽度);
this.height=ko.可观察(高度);
};
var$file=$(“#file”);
$file.fileupload({
replaceFileInput:false
});
应用绑定(新视图模型(300300))



<input id="file" type="file" data-bind="attr:{'data-height': height, 'data-width': width}" /><br />
<input type="text" data-bind="textInput: width" /><br />
<input type="text" data-bind="textInput: height" />
var ViewModel = function(width, height) {
  this.width = ko.observable(width);
  this.height = ko.observable(height);
};

ko.applyBindings(new ViewModel(300, 300));

var $file = $('#file');
$file.fileupload({
    add: function(){
    ko.cleanNode($file[0]);
    ko.applyBindings(ViewModel, $file[0]);
  },
  change: function(e, data) {
    ko.cleanNode($file[0]);
    ko.applyBindings(ViewModel, $file[0]);
  }
});