Tôi đang cố gắng hiểu thực hành tốt nhất để xác định và tổ chức chế độ xem js của tôi bằng loại trực tiếp là gì. Tôi không phải là thiên tài js như vậy ...Tại sao trong ví dụ knockout.js là viewmodel đôi khi được định nghĩa là một hàm và lần khác một định nghĩa biến trực tiếp?
Ok như vậy trong nhiều ví dụ ViewModel được định nghĩa là:
var viewModel = {
firstName: ko.observable("Bert"),
lastName: ko.observable("Bertington"),
capitalizeLastName: function() {
var currentVal = this.lastName(); // Read the current value
this.lastName(currentVal.toUpperCase()); // Write back a modified value
}
};
cách khác là tạo ra một loại constructor:
function viewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington"); etc.............
Bản năng của tôi là tạo ra các khung nhìn của tôi như là các hàm/lớp nhưng thấy rằng khi định nghĩa các hàm bên trong cho những thứ như ajax calls etc, tôi không thể cập nhật các biến viewModel bên trong các định nghĩa hàm. Trước tiên tôi phải xác định viewModel và sau đó "thêm" các chức năng sau?
function LogOnModel() {
this.userName = ko.observable("");
this.password = ko.observable("");
this.userNameExists = ko.observable(true);
this.passwordCorrect = ko.observable(true);
this.returnURL = ko.observable(document.location.href.replace("http://" + location.host,""));
this.login = function() {
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: ko.toJSON(this),
dataType: 'json',
url: 'Account/LogOn',
success: function (result) {
this.userNameExists(result["UserNameExists"]);
this.passwordCorrect(result["PasswordCorrect"]);
alert(userLogOnModel.userNameExists);
}
});
this.loginFormFilled = ko.dependentObservable(function() {
if ((this.userName() != "") && (this.password() != ""))
return true;
else
return false;
}, this);
}
Ở trên, chức năng đăng nhập không thể cập nhật userNameExists hoặc passwordCorrect variables .. Tôi đã thử một loạt các cú pháp khác nhau. Khi tôi di chuyển hàm này ra khỏi hàm khởi tạo, nó hoạt động tốt ..
Tôi chỉ không hiểu mục đích của việc tạo kiểu hàm dựng nếu không có hàm thành viên nào tồn tại bên trong nó? Tôi đang thiếu gì? cảm ơn!
hey Cảm ơn! Hoạt động tuyệt vời. Khi tôi đã không đi qua bối cảnh bối cảnh (điều này) trong chức năng thành công là gì? vô giá trị? –
Theo mặc định, 'this' sẽ được đặt thành đối tượng chứa tất cả các cài đặt $ .ajax. –
đây là một bài đăng tuyệt vời về knockoutjs. về câu hỏi này và một số câu hỏi loại trực tiếp phổ biến khác: http://www.devcurry.com/2013/07/knockoutjs-cheat-sheet-for-beginners.html –