我正在尝试实施BlueImp
文件上传功能,并将上传的网址传递给我的knockout viewmodel。
我的问题是,当我尝试从属性中选择所需的项时,该属性始终为null,为什么?
我在下面添加了我的代码:
<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按钮我添加了一个
的房间<button id="newRoom" type="button" data-bind="click: addRoom">New Room</button>
调试时显示self.Rooms()不是函数或self.Rooms undefined。但我刚刚添加了一个房间(通过点击上面的按钮添加了房间)所以我希望看到一个值
答案 0 :(得分:0)
你之前是否初步确定了Rooms observable数组?
var ViewModel = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.Rooms = ko.observableArray(); // --> Here?
..other stuff
this.addRoom = function() {
self.Rooms.push(new Room());
}
因为从您的错误消息“self.Rooms()不是函数或self.Rooms undefined。”在我看来,它尚未初始化。
答案 1 :(得分:0)
不抱怨客房未定义。它抱怨说&#34;房间&#34;未定义。错误是您的变量名称不匹配。您已经告诉它,Rooms数组中的每个项目都会被传递到匿名函数中,因为&#34; roomId&#34;,然后您尝试访问&#34; room&#34;这是未定义的。
for (int i=0;i<10;i++){
std::cout<<arr1[i%10]<<std::endl;
//other processing using arr1[i] indexing
}
&#34;函数(的 roomId 强>)&#34;应该是&#34;功能(房间)&#34;
var room = ko.utils.arrayFirst(self.Rooms(), function(roomId) {
return room.RoomID === roomId;
})
你有另一个&#34;房间&#34;函数外部的变量来保存结果,因此您可能希望将两个arrayFirst房间变量重命名为其他变量。