我有一個方法在我的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