Javascript 点击knockout.js下载文件
htmlJavascript 点击knockout.js下载文件,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,html <tbody data-bind="foreach: arrayList"> <tr> <td><a href="#" data-bind="click: $parent.downloadLastFile">Download</a></td> </tr> </tbody> 我试图在单击时下载一个文件。这段代码不起作用。有人能检查一下吗? 我看不到您的模型中定
<tbody data-bind="foreach: arrayList">
<tr>
<td><a href="#" data-bind="click: $parent.downloadLastFile">Download</a></td>
</tr>
</tbody>
我试图在单击时下载一个文件。这段代码不起作用。有人能检查一下吗?- 我看不到您的模型中定义的
变量self
- 由于我在您的
单击
绑定中看到
,我假设应该有一个父模型,您可以在该模型中定义数据并将数据分配给$parent
ArrayList
- 由于您使用的是
,因此无需再次使用knockout click binding
knockout click函数jquery
。错(“#download_div”)
- 我看不到您的模型中定义的
变量self
- 由于我在您的
单击
绑定中看到
,我假设应该有一个父模型,您可以在该模型中定义数据并将数据分配给$parent
ArrayList
- 由于您使用的是
,因此无需再次使用knockout click binding
knockout click函数jquery
。错(“#download_div”)
ViewModel
中没有ArrayList
属性,您的
和
没有关闭,并且在您的单击处理程序中有一个奇怪的(“#download_div”)
。请修复代码中明显的语法错误,并提供与此问题相关的所有代码。ViewModel
中没有ArrayList
属性,您的
和
未关闭,并且单击处理程序中有一个奇怪的(“#下载div”)
。请修复代码中明显的语法错误,并提供与问题相关的所有代码。嘿,我已经编辑了这个问题。你能再看一遍吗?@lola我提供的JSfiddle示例工作得很好。您应该能够查看它,修改自己的代码并使其工作。在更新的问题ArrayList
中,从未使用ItemViewModel
填充。更好的做法是在父VM中定义一次单击函数,而不是为每一行定义。你能再看一遍吗?@lola我提供的JSfiddle示例工作得很好。您应该能够查看它,修改自己的代码并使其工作。在更新的问题ArrayList
中,从未使用ItemViewModel
填充。更好的做法是在父VM中一次性定义click函数,而不是为每一行定义。
function ItemViewModel(item){
if(!$.isEmptyObject(item)){
var self = this;
self.lastFile = ko.observable(item.file_name);
self.downloadLastFile = function(row) {
console.log(row.lastFile());
var link = document.createElement('a');
link.href = data;
link.download = row.lastFile();
document.body.appendChild(link);
link.click();
}
}
}
function MainViewModel() {
var self = this;
self.arrayList= ko.observableArray();
}
dataModel = new MainViewModel();
ko.applyBindings(dataModel);
var data = [{id:1, file_name : "file_name1"},{id:2, file_name : "file_name2"}];
function AppViewModel(){
var self = this;
self.ArrayList = ko.observableArray($.map(data, function (item) {
return new ItemViewModel(item);
}));
self.downloadLastFile = function(item) {
console.log(item.lastFile());
var link = document.createElement('a');
link.href = data;
//here you append your rootURL to the file name
link.download = item.lastFile();
document.body.appendChild(link);
link.click();
}
}
var ItemViewModel = function(data){
var self = this;
self.lastFile = ko.observable(data.file_name);
}
var viewModel = new AppViewModel();
ko.applyBindings(viewModel);