src
" " 属性にバインドする必要がある計算変数に問題があります。
html は次のとおりです。
<ul data-bind="template: { name: 'attachements-template', foreach: attachements }">
</ul>
<script type="text/html" id="attachements-template">
<li>
<span data-bind="text: FileName"></span>
<img class="file-type-icon" data-bind="attr:{src: ImagePath}"/>
</li>
</script>
モデルは次のとおりです。
var Attachement = function () {
var self = this;
this.Id = ko.observable();
this.FileName = ko.observable();
self.ImagePath = ko.computed(function () {
return "images/" + getFileType(self.FileName);
});
};
var AttachementListModel = function () {
var self = this;
self.attachements = ko.observableArray([new Attachement()]);
...
};
getFileType
「画像」や「ドキュメント」などの文字列を返すjs関数にすぎません。これは問題だと思います。これにより、「Uncaught TypeError: Object function observable() ...」が表示されます。
外部関数を介して変数を計算することは可能ですか?
ただし、この機能がないと問題もあります。
self.ImagePath = ko.computed(function () {
return "images/" + self.FileName;
});
にデータをロードする方法は次のattachementListModel.attachements
とおりです。
$(document).ready(function () {
attachementListModel = new AttachementListModel();
ko.applyBindings(attachementListModel, document.getElementById("@uniqueAttachementsPanelId"));
// get all attachements for given business entity data
$.ajax({
url: "/api/attachement",
contentType: "text/json",
dataType: "json",
type: "GET",
data: { businessEntityType: "type", id: 1 },
success: function (data) {
attachementListModel.attachements(data);
},
error: function (data) {
alert("Error");
}
});
})
この場合 (外部関数を使用しない場合)、エラーが発生します: バインディングを解析できません。...(無名関数)。
attachementListModel.attachements(data);
したがって、問題がマッピングが発生する部分にあるのか、コードの他の部分にあるのかはわかりません。