我写了一个自定义绑定。当我尝试使用它来创建表时,相应的单元格中不会出现任何值。我知道它正在使用一个日志语句接收一个值,它正在我在函数中执行我需要的操作,但即使我尝试返回表中没有显示的内容。我做错了什么?我不太了解自定义绑定。
ko.bindingHandlers.sizeInMB = {
init: function(element, valueAccessor){
var size = valueAccessor();
if (size>=1000000000){size=(size/1000000000).toFixed(2)+' GB';}
else if (size>=1000000){size=(size/1000000).toFixed(2)+' MB';}
else if (size>=1000){size=(size/1000000).toFixed(2)+' MB';}
else if (size>1){size=size/1000000+' MB';}
else if (size==1){size=size/1000000+' MB';}
else{size='0 MB';}
//console.log(size);
ko.applyBindingsToNode(element, {value: size});
}
};
ko.bindingHandlers.fileType = {
init: function(element, valueAccessor){
var name = valueAccessor();
var type = name.split('.').pop();
ko.applyBindingsToNode(element, {value: type});
}
};
<!-- ko foreach: multiFileData().fileArray -->
<tr>
<td><span class="attachName" data-bind="text:name"></span></td>
<td><span data-bind="sizeInMB: size"></span></td>
<td><span data-bind="fileType: name"></span></td>
</tr>
<!-- /ko -->
答案 0 :(得分:0)
您正在将value
绑定应用于非输入元素。您可能希望使用text
绑定,或者将<span>
元素替换为<input>
s。
ko.bindingHandlers.sizeInMB = {
init: function(element, valueAccessor) {
var size = valueAccessor();
if (size >= 1000000000) {
size = (size / 1000000000).toFixed(2) + ' GB';
} else if (size >= 1000000) {
size = (size / 1000000).toFixed(2) + ' MB';
} else if (size >= 1000) {
size = (size / 1000000).toFixed(2) + ' MB';
} else if (size > 1) {
size = size / 1000000 + ' MB';
} else if (size == 1) {
size = size / 1000000 + ' MB';
} else {
size = '0 MB';
}
//console.log(size);
ko.applyBindingsToNode(element, {
text: size
});
}
};
ko.bindingHandlers.fileType = {
init: function(element, valueAccessor) {
var name = valueAccessor();
var type = name.split('.').pop();
ko.applyBindingsToNode(element, {
text: type
});
}
};
ko.applyBindings({ files: [ { name: "Some.Name", size: 1012302391 } ] });
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<!-- ko foreach: files -->
<div>
<span data-bind="text:name"></span>
<span data-bind="sizeInMB: size"></span>
<span data-bind="fileType: name"></span>
</div>
<!-- /ko -->
&#13;