我有一个方法在我的viewModel中调用ajax get方法来获取所有项目。这一切都很完美。然后我有一个ko.bindingHandler,用于通过ajaxSubmit内联上传图像。这也适用,但问题是我必须复制代码来获取bindingHandler中所有上传图像的项目,否则一旦上传图像就不会更新。刷新页面可以解决问题,但我希望视图能够自动刷新新图像。所以真正的问题是可以从bindingHandler中的viewModel调用一个函数吗?任何帮助将不胜感激!如何从ViewModel中调用一个函数bindingHandler
BindingHandler:
ko.bindingHandlers.imageInLineUpload = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var options = ko.utils.unwrapObservable(valueAccessor()),
property = ko.utils.unwrapObservable(options.property);
$(element).change(function() {
if (element.files.length) {
if ((element.files[0].type === "image/png") || (element.files[0].type === "image/jpeg")) {
var $this = $(this);
$(element.form).ajaxSubmit({
url: $.API.url + "XYZ",
type: "POST",
dataType: "text",
success: function (data) {
toastr.success('Upload Successful.');
var viewModel= new MyViewModel();
viewModel.GetObjects();
},
error: function (jqXHR, textStatus, errorThrown) {
toastr.error('Upload Failed. Please Try again!');
}
});
}
else {
toastr.error('Upload Failed. PNG and JPEG are the only supported formats.');
}
}
});
}
};
视图模型:我在过去已经使用
var MyViewModel = function() {
var self = this;
self.xyz = ko.observable("");
self.xyz = ko.observable("");
self.xyz = ko.observable("");
self.GetObjects= function() {
// Ajax call to fetch objects.
}
self.GetObjects();
};
ko.applyBindings(new MyViewModel());
得到它的工作!必须添加“$ root”。在函数调用前面。这工作完美!谢谢! – mikemike396 2014-10-29 13:13:04