BlueImp
ファイルアップロード機能を実装し、アップロードされたURLをノックアウトビューモデルに渡そうとしています。ノックアウトjsビューモデル外のプロパティを常に呼び出す
私の問題は、プロパティから必要な項目を選択しようとすると、そのプロパティは常にnullです、なぜですか?
私は以下の私のコード追加しました:それをデバッグするself.Roomsを示したとき、私は
<button id="newRoom" type="button" data-bind="click: addRoom">New Room</button>
で部屋を追加
<script>
var viewModel = null;
var $form = null;
$(function() {
var jsonData = someSerilizedDataFromTheServer;
viewModel = new ViewModel(@Html.Raw(jsonData))
ko.applyBindings(viewModel);
$form = $('#fileupload').fileupload({
dataType: 'json'
}).on('fileuploaddone', function (e, data) {
// here this is called for each individual file
if (typeof data.result != 'undefined') {
debugger;
var file = data.result.files[0]
var roomId = $("#hdnRoomId").val();
viewModel.addImageUrl(roomId, file.url);
}
});
});
$('#fileupload').addClass('fileupload-processing');
</script>
koViewModel.js
var ViewModel = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
..other stuff
this.addRoom = function() {
self.Rooms.push(new Room());
}
this.addImageUrl = function(roomId, imageUrl) {
debugger;
var room = ko.utils.arrayFirst(self.Rooms(), function(roomId) {
return room.RoomID === roomId;
})
}
..other stuff
}
var Room = function() {
..roomProperties
}
私のhtml]ボタンを()関数またはself.Rooms未定義ではありません。しかし、部屋を追加しました(上記のボタンをクリックして部屋を追加しました)ので、値が表示されることを期待しています。
「Rooms」にはどこの値を割り当てていますか? –
エラーが発生しているaddRoomはありますか?それは私がルームが使用されているのを見る唯一の場所です。あなたのビューモデルjsonはどのように見えますか? –
newRoomボタンをクリックすると、addRoomが呼び出されます。新しい部屋がUIに表示され、画像をアップロードできます。画像のアップロードが完了すると、 'fileuploaddone'が呼び出されます。ご覧のとおり、addImageUrlを呼び出すと、ko.utils.arrayFirstにエラーが発生します。そのため、newRoomボタンがクリックされた時点で部屋が初期化されています – tony09uk